Springdoc的常用注解(Swagger3标准的OpenAPI 3 规范)
规范先进:支持 OpenAPI 3.0,覆盖 WebSocket、异步接口等场景。兼容性强:完美适配 Spring Boot 2.6+ 和 3.x。配置简洁:通过注解和配置类即可实现复杂需求(如安全认证、多分组)。迁移时只需调整依赖、更新注解包路径,并参考上述对比表修改代码,即可快速升级到更健壮的 API 文档方案。
·
Springdoc 常用注解与 Swagger2 对比指南
Springdoc官网:https://springdoc.org/
Swagger2官网:https://swagger.io/
一、Springdoc 常用注解及对应 Swagger2 注解
以下是 Springdoc 的核心注解及其与 Swagger2 的对比,帮助开发者快速迁移和理解差异:
| 用途 | Springdoc (OpenAPI 3) | Swagger2 (Springfox) | 说明 |
|---|---|---|---|
| API 分组 | @Tag(name = "分组名") |
@Api(tags = "分组名") |
定义接口模块分组,作用于类或方法。Springdoc 的 @Tag 更灵活,支持 description 字段。 |
| 接口方法描述 | @Operation(summary = "摘要") |
@ApiOperation(value = "描述") |
描述单个接口的作用。Springdoc 的 @Operation 支持更多字段,如 tags、hidden 等。 |
| 参数描述 | @Parameter(description = "参数说明") |
@ApiParam("参数说明") |
描述方法参数。Springdoc 的 @Parameter 支持 required、example 等更细粒度配置。 |
| 模型字段描述 | @Schema(description = "字段说明") |
@ApiModelProperty("字段说明") |
描述 DTO 或模型的字段。@Schema 支持 example、nullable 等扩展属性。 |
| 响应结构定义 | @ApiResponse(responseCode = "200", description = "成功") |
@ApiResponse(code = 200, message = "成功") |
定义接口返回的 HTTP 状态码和描述。Springdoc 使用 responseCode 替代 code。 |
| 全局安全配置 | @SecurityScheme + @SecurityRequirement |
@ApiKeyAuthDefinition 等 |
Springdoc 通过 @SecurityScheme 定义安全方案(如 OAuth2、JWT),并在接口上使用 @SecurityRequirement 绑定。 |
二、详细注解使用示例
1. API 分组与接口描述
// Springdoc
@RestController
@Tag(name = "用户模块", description = "用户注册、登录、查询等操作")
public class UserController {
@Operation(
summary = "获取用户信息",
description = "根据用户ID查询详细信息",
tags = {"查询类接口"}
)
@GetMapping("/users/{id}")
public User getUser(@Parameter(description = "用户ID", example = "1001") @PathVariable Long id) {
// ...
}
}
// Swagger2
@RestController
@Api(tags = "用户模块", description = "用户相关操作")
public class UserController {
@ApiOperation(value = "获取用户信息", notes = "根据ID查询")
@GetMapping("/users/{id}")
public User getUser(@ApiParam("用户ID") @PathVariable Long id) {
// ...
}
}
2. 模型字段描述
// Springdoc
public class User {
@Schema(description = "用户ID", example = "1001", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "用户名", example = "john_doe", maxLength = 20)
private String username;
}
// Swagger2
public class User {
@ApiModelProperty(value = "用户ID", example = "1001", required = true)
private Long id;
@ApiModelProperty(value = "用户名", example = "john_doe")
private String username;
}
3. 安全认证配置
// Springdoc
@Configuration
@SecurityScheme(
name = "BearerAuth",
type = SecuritySchemeType.HTTP,
scheme = "bearer",
bearerFormat = "JWT"
)
public class OpenApiConfig {}
@Operation(summary = "删除用户", security = @SecurityRequirement(name = "BearerAuth"))
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
// ...
}
// Swagger2
@Configuration
public class SwaggerConfig {
@Bean
public SecurityConfiguration security() {
return new SecurityConfiguration(
"client-id", "client-secret", "realm",
"app-name", "apiKey", ApiKeyVehicle.HEADER, "Authorization", ","
);
}
}
@ApiOperation(value = "删除用户")
@ApiImplicitParams({
@ApiImplicitParam(name = "Authorization", value = "JWT Token", required = true, dataType = "string", paramType = "header")
})
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
// ...
}
三、Springdoc 与 Swagger2 的核心差异
| 对比维度 | Springdoc | Swagger2 (Springfox) |
|---|---|---|
| 规范支持 | 支持 OpenAPI 3.0+(现代标准,兼容性更强) | 仅支持 Swagger 2.0(旧版规范) |
| 维护状态 | 活跃维护,适配 Spring Boot 3.x | 已停止维护(2020年后无更新) |
| 路径匹配策略 | 兼容 Spring Boot 2.6+ 的 PathPatternParser |
在 Spring Boot 2.6+ 中因路径策略变更可能失效 |
| 注解包路径 | io.swagger.v3.oas.annotations |
io.swagger.annotations |
| 异步接口支持 | 支持 Reactive(如 WebFlux)、Servlet 异步 | 对异步接口支持较弱 |
| 安全性配置 | 通过 @SecurityScheme 灵活定义多种认证方式 |
配置较为繁琐,依赖 SecurityConfiguration |
| UI 自定义 | 提供主题切换、路径修改等配置项 | 自定义需修改静态资源或 CSS |
四、迁移注意事项
-
依赖替换
移除springfox-swagger2和springfox-swagger-ui,添加 Springdoc 依赖:<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.5.0</version> </dependency> -
注解包替换
将io.swagger.annotations替换为io.swagger.v3.oas.annotations。 -
配置调整
- 文档访问路径:Swagger2 的
swagger-ui.html变为 Springdoc 的swagger-ui/index.html。 - 分组配置:使用
GroupedOpenApi替代Docket。
- 文档访问路径:Swagger2 的
-
解决常见问题
- 注解不生效:检查是否使用了正确的包路径。
- 文档空白:确保未拦截
/v3/api-docs和/swagger-ui/**路径(如 Spring Security 配置)。
五、总结
Springdoc 作为 Swagger2 的现代替代方案,具有以下优势:
- 规范先进:支持 OpenAPI 3.0,覆盖 WebSocket、异步接口等场景。
- 兼容性强:完美适配 Spring Boot 2.6+ 和 3.x。
- 配置简洁:通过注解和配置类即可实现复杂需求(如安全认证、多分组)。
迁移时只需调整依赖、更新注解包路径,并参考上述对比表修改代码,即可快速升级到更健壮的 API 文档方案。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)