当前位置:   article > 正文

SpringBoot3+支持Knife4j 4.0以上_knife4j-openapi3-jakarta-spring-boot-starter

knife4j-openapi3-jakarta-spring-boot-starter

一、引用Knife4j的starter,Maven坐标

  1. <dependency>
  2. <groupId>com.github.xiaoymin</groupId>
  3. <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
  4. <version>4.4.0</version>
  5. </dependency>

二、配置yml

目前给出的是扫描一个大包,后面会有分组的代码

  1. # springdoc-openapi项目配置
  2. springdoc:
  3. swagger-ui:
  4. path: /swagger-ui.html
  5. tags-sorter: alpha
  6. operations-sorter: alpha
  7. api-docs:
  8. path: /v3/api-docs
  9. group-configs:
  10. - group: 'all'
  11. paths-to-match: '/**'
  12. packages-to-scan: com.quick.controller
  13. # knife4j的增强配置,不需要增强可以不配
  14. knife4j:
  15. enable: true
  16. setting:
  17. language: zh_cn

参考官方中文文档:快速开始 | Knife4j

 三、定义配置文件config

定义一个配置类WebMvcConfiguration,实现静态资源映射,保证生成的接口文档能够正常进行展示

  1. /**
  2. * 配置类,注册web层相关组件
  3. */
  4. @Configuration
  5. @Slf4j
  6. public class WebMvcConfiguration extends WebMvcConfigurationSupport {
  7. /**
  8. * 设置静态资源映射
  9. * @param registry
  10. */
  11. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  12. log.info("开始设置静态资源映射...");
  13. registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
  14. registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  15. }
  16. }

两种分组方法:

 1、建一个配置类SwaggerConfig,实现接口文档能够分组展示
  1. @Configuration
  2. public class SwaggerConfig {
  3. @Bean
  4. public GroupedOpenApi adminApi() {
  5. return GroupedOpenApi.builder()
  6. .group("管理端接口")
  7. .pathsToMatch("/admin/**") // 根据你的实际路径进行配置
  8. .build();
  9. }
  10. @Bean
  11. public GroupedOpenApi userApi() {
  12. return GroupedOpenApi.builder()
  13. .group("C端接口")
  14. .pathsToMatch("/user/**") // 根据你的实际路径进行配置
  15. .build();
  16. }
  17. @Bean
  18. public OpenAPI springShopOpenAPI() {
  19. return new OpenAPI()
  20. .info(new Info()
  21. .title("接口文档")
  22. //描叙
  23. .description("接口文档")
  24. //版本
  25. .version("v1")
  26. //作者信息,自行设置
  27. .contact(new Contact().name("bluefoxyu"))
  28. //设置接口文档的许可证信息
  29. .license(new License().name("Apache 2.0").url("http://springdoc.org")));
  30. }
  31. }

效果图如下

 

 

 2、在上面的yml的配置类里面也设置了,我设置了扫描的包是user和admin的父包controller,里面的接口是所有子包接口的集合,效果图如下
  1. group-configs:
  2. - group: 'all'
  3. paths-to-match: '/**'
  4. packages-to-scan: com.quick.controller

 

 

当然也可以直接在yml配置文件里面配置分组信息,那样就不用在配置类里面定义以下代码,具体参考中文官方文档 :3.1 增强模式 | Knife4j

  1. @Bean
  2. public GroupedOpenApi adminApi() {
  3. return GroupedOpenApi.builder()
  4. .group("管理端接口")
  5. .pathsToMatch("/admin/**") // 根据你的实际路径进行配置
  6. .build();
  7. }
  8. @Bean
  9. public GroupedOpenApi userApi() {
  10. return GroupedOpenApi.builder()
  11. .group("C端接口")
  12. .pathsToMatch("/user/**") // 根据你的实际路径进行配置
  13. .build();
  14. }

以下给出修改的yml和完整的yml

  1. - group: 'admin'
  2. paths-to-match: '/**'
  3. packages-to-scan: com.quick.controller.admin
  4. - group: 'user'
  5. paths-to-match: '/**'
  6. packages-to-scan: com.quick.controller.user
  1. # springdoc-openapi项目配置
  2. springdoc:
  3. swagger-ui:
  4. path: /swagger-ui.html
  5. tags-sorter: alpha
  6. operations-sorter: alpha
  7. api-docs:
  8. path: /v3/api-docs
  9. group-configs:
  10. - group: 'admin'
  11. paths-to-match: '/**'
  12. packages-to-scan: com.quick.controller.admin
  13. - group: 'user'
  14. paths-to-match: '/**'
  15. packages-to-scan: com.quick.controller.user
  16. # knife4j的增强配置,不需要增强可以不配
  17. knife4j:
  18. enable: true
  19. setting:
  20. language: zh_cn

 效果图如下:

 

 

综上所述:两种分组方法任选一种。

上面配置类里面的以下代码则是介绍,也可以在yml里面配置,以下就不再多说。

具体可以参考3.1 增强模式 | Knife4j

  1. @Bean
  2. public OpenAPI springShopOpenAPI() {
  3. return new OpenAPI()
  4. .info(new Info()
  5. .title("餐途快取项目接口文档")
  6. //描叙
  7. .description("餐途快取项目接口文档")
  8. //版本
  9. .version("v1")
  10. //作者信息,自行设置
  11. .contact(new Contact().name("bluefoxyu"))
  12. //设置接口文档的许可证信息
  13. .license(new License().name("Apache 2.0").url("http://springdoc.org")));
  14. }

4、实现接口文档的生成

网址:http://localhost:8080/doc.html

5、Swagger3 注解使用(Open API 3)

可参考官方文档里面入门快速案例:快速开始 | Knife4j

  1. @RestController
  2. @RequestMapping("body")
  3. @Tag(name = "body参数")
  4. public class BodyController {
  5. @Operation(summary = "普通body请求")
  6. @PostMapping("/body")
  7. public ResponseEntity<FileResp> body(@RequestBody FileResp fileResp){
  8. return ResponseEntity.ok(fileResp);
  9. }
  10. @Operation(summary = "普通body请求+Param+Header+Path")
  11. @Parameters({
  12. @Parameter(name = "id",description = "文件id",in = ParameterIn.PATH),
  13. @Parameter(name = "token",description = "请求token",required = true,in = ParameterIn.HEADER),
  14. @Parameter(name = "name",description = "文件名称",required = true,in=ParameterIn.QUERY)
  15. })
  16. @PostMapping("/bodyParamHeaderPath/{id}")
  17. public ResponseEntity<FileResp> bodyParamHeaderPath(@PathVariable("id") String id,@RequestHeader("token") String token, @RequestParam("name")String name,@RequestBody FileResp fileResp){
  18. fileResp.setName(fileResp.getName()+",receiveName:"+name+",token:"+token+",pathID:"+id);
  19. return ResponseEntity.ok(fileResp);
  20. }
  21. }

 swagger2和swagger3注解有些变化,具体可以参考:Swagger 2.X Annotations · swagger-api/swagger-core Wiki · GitHub

注意:swagger 3 注解的包路径为io.swagger.v3.oas.annotations.

这里参考了这位博主的博文:Swagger3 注解使用(Open API 3)_swagger3注解-CSDN博客

 下面是我的一些代码改动

  1. //controller
  2. //@Api(tags = "通用接口")
  3. @Tag(name = "通用接口")
  4. //@ApiOperation("文件上传")
  5. @Operation(summary = "文件上传")
  6. //实体类
  7. @Data
  8. //@ApiModel(description = "员工登录时传递的数据模型")
  9. @Schema(description = "员工登录时传递的数据模型")
  10. public class EmployeeLoginDTO implements Serializable {
  11. //@ApiModelProperty("用户名")
  12. @Schema(description = "用户名")
  13. private String username;
  14. //@ApiModelProperty("密码")
  15. @Schema(description = "密码")
  16. private String password;
  17. }

 

6、关于Knife4j文档请求异常问题

有可能是springboot版本和Knife4j的版本不一致问题,参考:Knife4j版本参考 | Knife4j

也可参考Knife4j文档请求异常 | Knife4j

Spring Boot版本Knife4j Swagger2规范Knife4j OpenAPI3规范
1.5.x~2.0.0<Knife4j 2.0.0>=Knife4j 4.0.0
2.0~2.2Knife4j 2.0.0 ~ 2.0.6>=Knife4j 4.0.0
2.2.x~2.4.0Knife4j 2.0.6 ~ 2.0.9>=Knife4j 4.0.0
2.4.0~2.7.x>=Knife4j 4.0.0>=Knife4j 4.0.0
>= 3.0>=Knife4j 4.0.0>=Knife4j 4.0.0

还有一种情况我遇到过,这个博主的文章完美解决Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)_standard commons logging discovery in action with -CSDN博客

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/891355
推荐阅读
相关标签
  

闽ICP备14008679号