不能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 groupId>
< artifactId> springdoc-openapi-security artifactId>
< version> 1.6.9 version>
dependency>
这个依赖性但会前提特性帮我们看来丢连通器中所带有 @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 groupId>
< artifactId> springdoc-openapi-data-rest artifactId>
< version> 1.6.9 version>
dependency>
< dependency>
< groupId> org.springdoc groupId>
< artifactId> springdoc-openapi-ui artifactId>
< version> 1.6.9 version>
dependency>
填充的连通器软件包如下:
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 groupId>
< artifactId> springdoc-openapi-ui artifactId>
< version> 1.6.9 version>
dependency>
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
这里有最新开源信息、软件更换、核心技术大排档等内容
点这里 ↓↓↓ 回忆起 关注✔ 标星⭐ 哦~
。沈阳治疗白癜风哪家好杭州治疗不孕不育医院哪家好
广州好的白癜风专科医院
吉林男科专科医院
贵阳甲状腺医院哪个好
上一篇: 看好保障,增配收租型不动产,平安4万亿险资下半年这么投
下一篇: 之前新广州知识城打造创新合作新典范
- 无奈又不争的事实,樊振东的技术体系领先了!
- 飞盘热度未息,橄榄球辣妹又输球,网友:“媛媛不断”?
- 聪明款项“越跌越买”,半导体ETF(512480)跌近3%,上周获款项净流入超7亿元,领跑半导体主题ETF
- 日本网友:张本智和已经没法潜力了,王楚钦超越樊振东成为世界霸主
- 中超4消息!中超积分榜更新,泰山9连胜紧咬东道,海港走出颓势
- 股票策略人寿保险平均亏2.41% 2023年48家百亿人寿保险取得正收益
- 乒乓球总决赛:袁励滕荣获冠军,王楚钦的表现判若两人。
- 2-0登顶!AC米兰拒绝首战,7000万新星造2球,国米仅排第6
- 券商资管业务承压 保险业遇阻公募阔步
- 王楚钦夺冠得30万奖励,樊振东25万,林高远20万,男双少的可怜!
- 利物浦小将巴伊塞蒂奇谈首秀:难以置信,埃弗顿气氛太疯狂
- 私募方刚“走心”反思 多维度升级策略捕捉新机遇
- 3比0王楚钦横扫张本智,晋级四强,全场:拆摩托越来越顺手了
- 中国男排要想晋级世锦赛16强,下场对阵加拿大理应有失
- ETF尽显产品优势 新年首周总份额增加超73亿份
- 战报来袭!王楚钦3-0李俊智和,总决赛男单4强出炉,国乒独占3席
- ️跑不过的,是时间!C罗昔日飚速时刻:半场开趟生碰对手后防
- 拓荆科技跌超5%,半导体设备ETF(561980)跌近3%再创上市新高!CES 2024召开在即,板块后续机会在哪?
- 中国一个集新贵王楚钦!王楚钦四盘全胜轻取德国资深乒球老将邱党!
- 国足对手要变强?欧洲黑人后卫公开表态,期望能成越南蒋光太