Java 17 Spring Boot 3.5.5 Springdoc OpenAPI 2.8.13
Maven 依赖
|
|
请注意与 Spring Boot 版本的兼容,兼容矩阵可查看 FAQ
相关配置
OpenAPI doc
详细配置项可参考 官方文档
默认路径:
|
|
我们可以通过配置 springdoc.api-docs.path
来自定义 OpenAPI doc 的路径。
例如:
|
|
默认情况下,OpenAPI doc 为 JSON 格式,我们可以通过如下配置修改为 yaml:
|
|
Swagger UI
详细配置项可参考 官方文档
默认路径:
|
|
我们可以通过配置 springdoc.swagger-ui.path
来自定义 Swagger UI 的路径。
例如:
|
|
使用示例
假设我们有一个 BookController 类,用于处理 Book 相关的请求,内容如下:
|
|
那么当我们运行程序时无需任何配置,即可生成对应的 OpenAPI 文档和 Swagger UI。
打开浏览器,输入网址:http://localhost:8080/v3/api-docs
可以看到 OpenAPI 文档(注:JSON 格式,由于我浏览器使用了 JSON Viewer Pro 插件,界面显示稍有不同)
紧接着,我们打开 http://localhost:8080/swagger-ui/index.html
可以看到 Swagger UI 界面:
很显然,因为我们未配置任何内容,所以生成的文档很多内容都是空的或默认值。我们需要根据实际情况进行修改。
首先,我们可以定义一个 OpenAPIConfig
类,用于配置 OpenAPI 文档的相关信息(如标题、版本、描述等)。
|
|
这样,文档的标题就变成了这样:
对于接口方法的描述等信息变更,可通过传统的添加注解的方式,如 @Operation
、@ApiResponse
等注解进行配置,或更为便捷的 javadoc 方式。
Swagger 注解式写法
以下仅列举常用注解:
注解 | 作用 |
---|---|
@Tag | 用于定义 API 分组的标签,每个 API 操作可以有多个标签。 |
@Operation | 用于定义 API 操作的详细信息,包括操作的描述、请求方法、参数、响应等。 |
@ApiResponse | 用于定义 API 操作的响应的详细信息,包括响应的状态码、响应的描述、响应的示例值等。 |
现在我们以 BookController
为例,添加 Swagger UI 注解:
|
|
Javadoc 写法 [推荐]
我们可以看到对于注解形式的写法,代码侵入性强,大量注解充斥在 Controller 里面,实际业务代码占比很小。那么有没有更便捷的方式,代码修改更少的方式去实现呢?答案就是 javadoc。
Springdoc-openapi 支持 Javadoc 注释,我们可以在 Controller 类、方法、参数等上添加 Javadoc 注释,这些注释会被解析并生成对应的 API 文档。
但需要我们导入 therapi-runtime-javadoc
依赖:
|
|
|
|
两种写法对比:
维度 | 注解式写法 | Javadoc 式写法 |
---|---|---|
代码侵入性 | 高:需在类、方法、参数上添加大量注解 | 低:仅需维护标准 Javadoc 注释,无额外代码 |
业务代码占比 | 低:注解代码可能多于业务逻辑 | 高:注释与业务代码分离,不干扰逻辑阅读 |
维护成本 | 高:注解需与业务同步修改(如接口名、参数变了,注解也要改) | 低:修改业务时同步更新注释即可,无需额外改注解 |
学习成本 | 需学习特定框架的注解规则(如 @Operation 与 @ApiResponse 搭配) | 基本没有 |
FAQ
Spring Boot 与 Springdoc OpenAPI 版本兼容矩阵
更多内容请查看 官方文档
Spring Boot 版本 | Springdoc OpenAPI 版本 |
---|---|
3.5.x | 2.8.x |
3.4.x | 2.7.x - 2.8.x |
3.3.x | 2.6.x |
3.2.x | 2.3.x - 2.5.x |
3.1.x | 2.2.x |
3.0.x | 2.0.x - 2.1.x |
2.7.x、1.5.x | 1.6.0+ |
2.6.x、1.5.x | 1.6.0+ |
2.5.x、1.5.x | 1.5.9+ |
2.4.x、1.5.x | 1.5.0+ |
2.3.x、1.5.x | 1.4.0+ |
2.2.x、1.5.x | 1.2.1+ |
2.0.x、1.5.x | 1.0.0+ |
Springdoc-openapi BOM
自 2.8.7
开始,Springdoc OpenAPI 提供了一个 BOM(Bill of Materials),用于管理依赖版本。
|
|
异常处理
Springdoc-openapi 支持自定义异常处理的文档展示,我们可以通过 @ControllerAdvice
与 @ResponseStatus
注解来实现。
|
|
分页参数
Spring Data JPA 与 Spring MVC 可以无缝集成,自 springdoc-openapi v1.6.0 版本起,就已开箱即用地支持 Pageable。 page、size 和 sort 查询参数会被添加到生成的文档中:
示例:
|
|
感谢您的耐心阅读!来选个表情,或者留个评论吧!