您当前的位置:首页 >> 家居优品

不能Swagger,那我用啥?

2023-04-07 12:16:09

出访梯度,这两个仅有给出访梯度由此而来了一个别名,出访这两个时但会前提特性重定向到互换的梯度上。

3. 为基础 Spring Security

如果我们的重大项目中所用作了 Spring Security,那么部分连通器的多达值有可能但会比较特殊,例如前面这个连通器:

@RestController

publicclassHelloController{

@GetMapping( "/hello")

publicString hello(@AuthenticationPrincipal User user){

System.out.println( "user = "+ user);

return"hello";

}

}

这个连通器的多达值延上了一个 @AuthenticationPrincipal 记事透露局限性登录最终的用户对象,这个多达值在也就是说用作中所,并不需末端录导,客户端但会前提特性汇流该多达值。

但是!如果用作了 SpringDoc,通过Facebook去函多达调用这个连通器的时候,这个多达值就不必要要录导,对于这种问题,我们可以引入如下依赖性前提特性帮我们解决:

< dependency>

< groupId> org.springdoc

< artifactId> springdoc-openapi-security

< version> 1.6.9

这个依赖性但会前提特性帮我们看来丢连通器中所带有 @AuthenticationPrincipal 记事的多达值,这样我们在通过 swagger-ui 去透过连通器试验中所的时候就不需录导这个多达值了。

4. 为基础 Spring Data Rest

Spring Boot 中所透过了 Spring Data Rest,为基础 Jpa 可以十分方便的框架出 Restful 运用于。但是这种 Restful 运用于不需开发者自己写下连通器,那么怎么填充连通器软件包呢(连连通器在哪里都不或许)?针对于此,SpringDoc 也透过了系统性的支持,我们一起来看下。

4.1 Spring Data Rest创始工程施工

首先创始一个 Spring Boot 工程施工,引入 Web 、 Jpa 、 MySQL 、 Rest Repositories 依赖性:

配备索引

主要配备两个,一个是索引,另一个是 Jpa:

spring.datasource.username=root

spring.datasource.password=1234

spring.datasource.url=jdbc:mysql:///test02?serverTimezone=Asia/Shanghai

spring.jpa.hibernate.ddl-auto=update

spring.jpa.show-sql=true

spring.jpa.database=mysql

spring.jpa.database-platform=mysql

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

这里的配备,和 Jpa 中所的前提一致。

前面三行配备了索引的前提个人信息,包括索引连通池、索引网址、索引密码、索引连通邮箱以及索引驱动中文名称。

年中的天地人配备了 JPA 的前提个人信息,分别透露填充 SQL 的方言、打印出填充的 SQL 、每次叫停重大项目时根据也就是说前提并不需要是不是更换请注意、索引平台是 MySQL。

这两段配备是关于 MySQL + JPA 的配备,不了用过 JPA 的赌客可以参阅松哥以后的 JPA 篇名:

框架实体类 @Entity(name = "t_book")

publicclassBook{

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

privateLong id;

@Column(name = "book_name")

privateString name;

privateString author;

//省略 getter/setter

}

publicinterfaceBookRepositoryextendsJpaRepository< Book, Long> {

}

这里一个是配备了一个实体类 Book,另一个则是配备了一个 BookRepository ,重大项目叫停最终后,框架但会根据 Book 类的假设,在索引中所前提特性创始相应的请注意,BookRepository 连通器则是继承自 JpaRepository ,JpaRepository 中所备用了一些前提的修定改查法则。

好了,代码写下完了。

啥?你好像啥都不了写下啊?是的,啥都不了写下,啥都无需写下,一个 RESTful 画风的修定改查运用于就有了,这就是 Spring Boot 的魅力!

试验中所

此时,我们就可以叫停重大项目透过试验中所了,用作 POSTMAN 来试验中所(大家也可以适时并不需要趁手的 HTTP 劝说辅助工具)。

此时我们的重大项目仍未匹配具备了一些连通器,我们分别来看:

根据 id 检视连通器

{id}

这个连通器透露根据 id 检视某一本书:

分页检视

这是一个装配检视连通器,匹配劝说梯度是类名首字母复多达,并且再延一个 s 单词。这个连通器也就是说上是一个分页检视连通器,不了有录多达值,透露检视第一页,开本 20 条统计多达据。

检视结果中所,除了该有的统计多达据以外,也包含了分页统计多达据:

分页统计多达据中所:

size 透露开本检视历史记录多达

totalElements 透露总历史记录多达

totalPages 透露总开本

number 透露局限性开本,从0开始计

如果要分页或者加权检视,可以用作 _links 中所的绑定。 ,desc 。

替换成

也可以替换成统计多达据,替换成是 POST 劝说,统计多达据通过 JSON 的基本上录导,如下:

替换成最终在此之后,匹配但会来到替换成最终的统计多达据。

删减

删减连通器匹配也是依赖性于的,统计多达据删减劝说是一个 PUT 劝说,删减的多达值也是通过 JSON 的基本上录导:

匹配前提下,删减最终后,但会来到删减最终的统计多达据。

删除

当然也可以通过 DELETE 劝说根据 id 删除统计多达据:

删除最终后,是不了有来到值的。

不需几行代码,一个前提的修定改查就有了。

这些都是匹配的配备,这些匹配的配备也就是说上都是在 JpaRepository 的基础上发挥作用的,也就是说重大项目中所,我们还可以对这些特性透过定制。

检视定制

最国际上的定制,就是检视,因为修定改操作的发生变化不像检视这么非常丰富。对于检视的定制,十分容易,只需透过系统性的法则才可。例如根据著者检视类书籍:

publicinterfaceBookRepositoryextendsJpaRepository< Book, Long> {

List findBookByAuthorContaining(@Param( "author") String author) ;

}

注意,法则的假设,多达值要有 @Param 记事。

定制完成后,重启重大项目,此时就多了一个检视连通器,开发者可以通过 来检视和 book 系统性的自假设连通器都有哪些:

检视结果透露,只有一个自假设连通器,连通器名就是法则名,而且检视结果还给出了连通器函多达调用的示例。我们来尝试函多达调用一下自己假设的检视连通器:

开发者可以根据也就是说前提,在 BookRepository 中所假设任意多个检视法则,检视法则的假设规章和 Jpa 中所一模一样(不懂 Jpa 的赌客,可以参阅 大排档|一文读懂 Spring Data Jpa! ,或者在松哥个人网站 www.javaboy.org 上查找 JPA,有系统性教材参阅)。但是,这样有一个缺陷,就是 Jpa 中所法则名太长,因此,如果不一切都是用作法则名作为连通器名,则可以自假设连通器名:

publicinterfaceBookRepositoryextendsJpaRepository< Book, Long> {

@RestResource(rel = "byauthor",path = "byauthor")

List findBookByAuthorContaining(@Param( "author") String author) ;

}

@RestResource 记事中所,两个多达值的意义:

rel 透露连通器检视中所,这个法则的 key

path 透露劝说梯度

这样假设完成后,透露连通器叫做 byauthor ,重启重大项目,在此期间检视连通器:

除了 rel 和 path 两个一般来说以外, @RestResource 中所还有一个一般来说, exported 透露是不是暴露出连通器,匹配为 true ,透露暴露出连通器,即法则可以在末端函多达调用,如果实际上一切都是假设一个法则,不需在末端函多达调用这个法则,可以设置 exported 一般来说为 false 。

如果不一切都是暴露出在此之前假设好的法则,例如根据 id 删除统计多达据,只需在自假设连通器中所重写下该法则,然后在该法则上延 @RestResource 记事并且配备系统性一般来说才可。

publicinterfaceBookRepositoryextendsJpaRepository< Book, Long> {

@RestResource(rel = "byauthor",path = "byauthor")

List findBookByAuthorContaining(@Param( "author") String author) ;

@Override

@RestResource(exported = false)

voiddeleteById(Long aLong);

}

另外填充的 JSON 字符串中所的空集名和单个 item 的起名都是可以自假设的:

@RepositoryRestResource(collectionResourceRel = "bs",itemResourceRel = "b",path = "bs")

publicinterfaceBookRepositoryextendsJpaRepository< Book, Long> {

@RestResource(rel = "byauthor",path = "byauthor")

List findBookByAuthorContaining(@Param( "author") String author) ;

@Override

@RestResource(exported = false)

voiddeleteById(Long aLong);

}

path 一般来说透露劝说梯度,劝说梯度匹配是类名首字母复多达+s,可以在这里自己重新假设。

其他配备

最后,也可以在 application.properties 中所配备 REST 前提多达值:

spring.data.rest.base-path=/api

spring.data.rest.sort-param-name=sort

spring.data.rest.page-param-name=page

spring.data.rest.limit-param-name=size

spring.data.rest.max-page-size=20

spring.data.rest.default-page-size=0

spring.data.rest.return-body-on-update=true

spring.data.rest.return-body-on-create=true

配备意义,从上往下,依次是:

给所有的连通器替换成统一的前缀

配备加权多达值的 key ,匹配是 sort

配备分页检视时上标的 key,匹配是 page

配备分页检视时开本检视开本的 key,匹配是size

配备开本第二大检视历史记录多达,匹配是 20 条

分页检视时匹配的上标

更换最终时是不是来到更换历史记录

替换成最终时是不是来到替换成历史记录

这是 Spring Data Rest 的一个简便用语,年中我们来看如何给这个填充的软件包。

4.2 填充连通器软件包

对于这种你都不了看到连通器的,我们只需替换成如下依赖性,就可以前提特性填充 API 软件包了,如下:

< dependency>

< groupId> org.springdoc

< artifactId> springdoc-openapi-data-rest

< version> 1.6.9

< dependency>

< groupId> org.springdoc

< artifactId> springdoc-openapi-ui

< version> 1.6.9

填充的连通器软件包如下:

5. 为基础 Actuator

在以后的 Spring Boot 教材中所,松哥还和大家介绍过 Spring Boot 中所的 actuator,这个辅助工具可以适时填充重大项目运行统计多达据的东南侧(endpoints),如果一切都是把这些东南侧也纳入到 SpringDoc 中所来,那么只需替换成如下配备才可:

springdoc.show-actuator=true

至于 SpringDoc 但会显示多少个 Actuator 东南侧出来,那就要看 Actuator 暴露出出来多少东南侧了,最终显示效用如下:

不过这里还有一个玩法!

SpringDoc 扮演的角色毕竟不是其业务特性,而是重大项目的辅助特性,所以,我们可以将之从其业务中所剥离,放到 Actuator 中所,毕竟 Actuator 专干这种事。那么只需增延如下两个配备才可:

springdoc.use-management-port=true

management.endpoints.web.exposure.include=openapi, swagger-ui

management.server.port=9090

配备完成后,将来就可以在 Actuator 中所去检视连通器软件包和互换的页面了,出访邮箱是:

6. 插入到 Swagger

如果你在重大项目中所仍未用作了 Swagger 了,那么也可以十分方便的插入到 SpringDoc 纸片来,插入的时候,首先引入 SpringDoc 依赖性:

< dependency>

< groupId> org.springdoc

< artifactId> springdoc-openapi-ui

< version> 1.6.9

Swagger 和 SpringDoc 记事的互换彼此间如下:

@Api → @Tag

@ApiIgnore → @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden

@ApiImplicitParam → @Parameter

@ApiImplicitParams → @Parameters

@ApiModel → @Schema

@ApiModelProperty(hidden = true) → @Schema(accessMode = READ_ONLY)

@ApiModelProperty → @Schema

@ApiOperation(value = "foo", notes = "bar") → @Operation(summary = "foo", deion = "bar")

@ApiParam → @Parameter

@ApiResponse(code = 404, message = "foo") → @ApiResponse(responseCode = "404", deion = "foo")

以前我们在 Swagger 中所配备连通器照相的方式如下:

@Bean

publicDocket publicApi{

returnnewDocket(DocumentationType.SWAGGER_2)

.select

.apis(RequestHandlerSelectors.basePackage( "org.github.springshop.web.public"))

.paths(PathSelectors.regex( "/public.*"))

.build

.groupName( "springshop-public")

.apiInfo(apiInfo);

}

@Bean

publicDocket adminApi{

returnnewDocket(DocumentationType.SWAGGER_2)

.select

.apis(RequestHandlerSelectors.basePackage( "org.github.springshop.web.admin"))

.paths(PathSelectors.regex( "/admin.*"))

.apis(RequestHandlerSelectors.withMethodAnnotation(Admin . class))

. build

. groupName(" springshop- admin")

. apiInfo( apiInfo) ;

}

现在在 SpringDoc 中所则按照如下方式透过配备才可(还可以按照记事去纸片需填充连通器软件包的法则):

@Configuration

publicclassSpringDocConfig{

@Bean

publicGroupedOpenApi publicApi{

returnGroupedOpenApi.builder

.group( "springshop-public")

.pathsToMatch( "/public/**")

.build;

}

@Bean

publicGroupedOpenApi adminApi{

returnGroupedOpenApi.builder

.group( "springshop-admin")

.pathsToMatch( "/admin/**")

.addOpenApiMethodFilter(method -> method.isAnnotationPresent(RequestMapping . class))

. build;

}

}

当然,如果你并不需对连通器软件包透过分组,那么也可以无需作 Java 配备,单独在 application.properties 中所透过配备才可:

springdoc.packages-to-scan=org.javaboy.spring_doc.controller

springdoc.paths-to-match=/**

在 SpringDoc 中所,如果你一切都是配备 Swagger UI,则可以通过如下方式透过配备:

@Bean

OpenAPI springShopOpenAPI{

returnnewOpenAPI

.info( newInfo.title( "湖州一点雾")

.deion( "Spring Boot 教材")

.version( "v0.0.1")

.license( newLicense.name( "Apache 2.0").url( "")))

.externalDocs( newExternalDocumentation

.deion( "一些描述个人信息")

.url( ""));

}

好啦,常见用语大概就是这样,感兴趣的赌客可以去于是就哦~关于 SpringDoc 的更多玩法,大家也可以参阅在此之前软件包:springdoc.org。

END

这里有最新开源信息、软件更换、核心技术大排档等内容

点这里 ↓↓↓ 回忆起 关注✔ 标星⭐ 哦~

沈阳治疗白癜风哪家好
杭州治疗不孕不育医院哪家好
广州好的白癜风专科医院
吉林男科专科医院
贵阳甲状腺医院哪个好
相关阅读
友情链接