Spring Boot 使用 SpringDoc 库的 Swagger3.0

Posted 福州司马懿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 使用 SpringDoc 库的 Swagger3.0相关的知识,希望对你有一定的参考价值。

Swagger 定义

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

SpringFox 的 Swagger 库

之前在SpringBoot项目中一直使用的是SpringFox提供的Swagger库,上了下官网发现已经有接近两年没出新版本了!前几天升级了SpringBoot 2.6.x 版本,发现这个库的兼容性也越来越不好了,有的常用注解属性被废弃了居然都没提供替代!

https://search.maven.org/ 网站上可以查到它的最近一次版本发布时时间:14-Jul-2020。

引入依赖的方式如下

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-boot-starter</artifactId>
  <version>3.0.0</version>
</dependency>

Spring5使用PATH_PATTERN_PARSER来替代原本的ANT_PATH_MATCHER。SpringBoot2.6.0开始,Spring默认路径匹配策略从ANT_PATH_MATCHER改成PATH_PATTERN_PARSER。但Swagger没有对其做兼容,因此会报空指针异常。需要修改application.yml,添加如下配置

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

SpringDoc

后来在网上一查发现,现在大家都在用另一款Swagger库SpringDoc。官网地址为:https://springdoc.org/

SpringDoc是一款可以结合SpringBoot使用的API文档生成工具,基于OpenAPI 3,目前在Github上已有1.7K+Star,更新发版还是挺勤快的,是一款更好用的Swagger库!值得一提的是SpringDoc不仅支持Spring WebMvc项目,还可以支持Spring WebFlux项目,甚至Spring Rest和Spring Native项目,总之非常强大

依赖

https://search.maven.org/ 网站上可以查到它的最近一次版本发布时时间:16-Dec-2022。

引入依赖的方式如下

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.14</version>
</dependency>

包名

  • 2.9.x
    • io.swagger
  • 3.0.0
    • io.swagger.core.v3
    • io.swagger.v3.oas.annotations

注解

这一步是可选的,因为改动太大,故 springfox对旧版的 swagger做了兼容处理。

Swagger2 的注解命名以易用性切入,全是 Api 开头,在培养出使用者依赖注解的习惯后,Swagger 3将注解名称规范化,工程化。

swagger2OpenAPI 3注解位置
@Api@Tag(name=“接口描述”, description = “详细说明”)Controller类上
@ApiOperation@Operation(summary = “接口方法描述”, description = “详细说明”)Controller方法上
@ApiImplicitParams@ParametersController 方法上
@ApiImplicitParam@Parameter(description=“参数描述”)Controller 方法上 @Parameters 里
@ApiParam@Parameter(description=“参数描述”)Controller 方法的参数上
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden-
@ApiModel@SchemaDTO类上(Data Transfer Object)
@ApiModelProperty@SchemaDTO属性上(Data Transfer Object)

常用配置

SpringDoc还有一些常用的配置

springdoc:
  swagger-ui:
    # 修改Swagger UI路径
    path: /swagger-ui.html
    # 开启Swagger UI界面
    enabled: true
  api-docs:
    # 修改api-docs路径
    path: /v3/api-docs
    # 开启api-docs
    enabled: true
  # 配置需要生成接口文档的扫描包
  packages-to-scan: com.macro.mall.tiny.controller
  # 配置需要生成接口文档的接口路径
  paths-to-match: /brand/**,/admin/**

访问地址

  • 2.9.x
    http://localhost:8081/context-path/swagger-ui.html
  • 3.0.0
    http://localhost:8081/context-path/swagger-ui/index.html

英文单词解释

  • explicit关键字
    只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他的参数都有默认值。它的作用是表明构造函数是显式方式显示的(当我们不希望自动类型转换的时候用。标准库好多构造函数都是explicit的)
  • implicit关键字
    与explicit对应,他表示隐式的进行数据转换(在需要隐式转换的时候用)。注:C++中不存在这个关键字,C#等编程语言中才有
  • DTO
    Data Transfer Object,即数据传输对象。用于表现层和应用层之间的数据交互 简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向界面UI,是通过UI的需求来定义的。 通过DTO我们实现了表现层与Model之间的解耦,表现层不引用Model(个人理解,就是Java Bean)
  • Controller
    Spring Controller本身也是一个Spring Bean,只是它多提供了Web能力,只需要造类上提供 @Controller 或者 @RestController 注解即可

以上是关于Spring Boot 使用 SpringDoc 库的 Swagger3.0的主要内容,如果未能解决你的问题,请参考以下文章

使用 springdoc-openapi 和 spring-boot-starter-data-mongodb 生成 OpenAPI 文档

Spring Boot 使用 SpringDoc 库的 Swagger3.0

升级到 Spring Boot 2.6 时 Spring Security 和 org.springdoc.ui.SwaggerConfig 之间的循环引用

SpringDoc openAPI 工具未扫描 Spring Boot 项目中的 API

从 Springfox Swagger 2 迁移到 Springdoc Open API

Springdoc OpenAPI ui 不遵守“位置”中的上下文路径