为什么使用SpringDoc
在SpringBoot低版本时一般使用Swagger扫描接口生成Json格式的在线文档,然后通过swagger-ui将Json格式的文档以页面形式展示文档。可惜遗憾的是swagger更新到3.0.0版本(springfox)后不更新了。
SpringBoot3.x以后需要的JDK版本最低为Java17,而Java17的包名在之前的版本中从javax更改为jakarta,导致swagger在SpringBoot3.x版本中完全无法使用,而SpringDoc不同于swagger,在SpringBoot出了3版本以后很快就兼容升级了,换句话说SpringDoc是SpringBoot全系列都支持的。
SpringDoc支持的内容
- OpenAPI 3的标准实现
- Spring-boot v3 (Java 17 & Jakarta EE 9)
- JSR-303支持, 专门针对
@NotNull
,@Min
,@Max
, and@Size
. - Swagger-ui支持
- OAuth2 认证流程
- 本机镜像打包支持(GraalVM native images)
最简集成SpringDoc
文档地址
- 创建SpringBoot项目
- 引入SpringDoc依赖
<!-- 适用于webmvc的SpringDoc依赖 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
该依赖包含swagger-ui和springdoc-openapi-starter-webmvc-api依赖,无需引入其它依赖即可生效。
- 创建一个测试接口,添加SpringDoc的注解以生成在线文档
package com.example.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 示例接口
*
* @author vains
*/
@RestController
@RequestMapping("/example")
@Tag(name = "示例接口", description = "提供示例内容展示SpringDoc集成效果")
public class ExampleController {
@GetMapping("/test01")
@Operation(summary = "无参查询接口", description = "hello")
public String test01() {
return "Hello Spring doc";
}
@GetMapping("/test02")
@Parameter(name = "test02", description = "url参数")
@Operation(summary = "查询参数示例", description = "原样返回入参")
public String test02(String test02) {
return test02;
}
@GetMapping("/test03/{test03}")
@Parameter(name = "test03", description = "url参数")
@Operation(summary = "url参数示例", description = "原样返回入参")
public String test03(@PathVariable String test03) {
return test03;
}
}
- 启动项目后访问提供的接口地址
http://127.0.0.1:8080/swagger-ui/index.html
效果图如下
Springfox和SpringDoc注解对照表
官方文档
Springfox | SpringDoc | 解释说明 |
---|---|---|
@Api | @Tag | 描述接口信息 |
@ApiIgnore | @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden | 隐藏字段 |
@ApiImplicitParam | @Parameter | 描述单个参数 |
@ApiImplicitParams | @Parameters | 描述多个参数 |
@ApiModel | @Schema | 描述数据模型 |
@ApiModelProperty(hidden = true) | @Schema(accessMode = READ_ONLY) | 描述属性,可隐藏 |
@ApiModelProperty | @Schema | 描述属性 |
@ApiOperation(value = "foo", notes = "bar") | @Operation(summary = "foo", description = "bar") | 描述接口操作,包括标题和注释 |
@ApiParam | @Parameter | 描述接口方法参数 |
@ApiResponse(code = 404, message = "foo") | @ApiResponse(responseCode = "404", description = "foo") | 描述接口响应信息,包括状态码和消息 |
附录
- SpringDoc官网
- 代码仓库:Gitee、Github