SpringDoc OpenAPI 3 注解使用说明。
本项目使用 springdoc-openapi-starter-webmvc-ui 自动生成 OpenAPI 3 文档。无需手动编写 YAML/JSON 规范,通过代码注解即可生成 API 文档。
启动项目后,访问以下地址:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
配置类位于 com.example.blog.config.SwaggerConfig:
@Configuration
public class SwaggerConfig {
private static final String SECURITY_SCHEME_NAME = "Authorization";
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(apiInfo())
.addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME))
.components(new Components()
.addSecuritySchemes(SECURITY_SCHEME_NAME, securityScheme()));
}
private Info apiInfo() {
return new Info()
.title("Hanphone Blog API 文档")
.description("基于 Spring Boot 的个人博客后端系统 API 文档")
.version("3.0.0");
}
private SecurityScheme securityScheme() {
return new SecurityScheme()
.name(SECURITY_SCHEME_NAME)
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.scheme("bearer")
.bearerFormat("JWT");
}
}
由于项目使用 JWT 进行认证,需要在 Swagger UI 中配置 Authorization:
Bearer your_token_here)注意:Token 需要先通过登录接口获取。
使用 @Tag 为 Controller 分组:
@Tag(name = "用户管理", description = "用户注册、登录等接口")
@RestController
@RequestMapping("/user")
public class UserController {
// ...
}
使用 @Operation 描述 API 操作:
@Operation(
summary = "用户登录",
description = "使用用户名和密码登录"
)
@ApiResponses({
@ApiResponse(responseCode = "200", description = "登录成功"),
@ApiResponse(responseCode = "401", description = "认证失败")
})
@PostMapping("/login")
public Result login(@RequestBody User user) {
// ...
}
@GetMapping("/blog/{id}")
@Operation(summary = "获取博客详情")
public Result getBlog(
@Parameter(name = "id", description = "博客ID", required = true)
@PathVariable Long id
) {
// ...
}
@GetMapping("/blogs")
@Operation(summary = "获取博客列表")
public Result getBlogs(
@Parameter(name = "page", description = "页码", example = "1")
@RequestParam(defaultValue = "1") Integer page,
@Parameter(name = "size", description = "每页数量", example = "10")
@RequestParam(defaultValue = "10") Integer size
) {
// ...
}
@Schema(description = "用户登录请求")
public class UserLoginRequest {
@Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "admin")
private String username;
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
private String password;
}
用于 Controller 类上,标记 API 分组。
| 参数 | 类型 | 说明 |
|---|---|---|
| name | String | API 分组名称 |
| description | String | 分组描述 |
用于方法上,描述 API 操作。
| 参数 | 类型 | 说明 |
|---|---|---|
| summary | String | API 简短描述 |
| description | String | API 详细说明 |
| tags | String[] | 分组标签 |
用于参数上,描述单个参数。
| 参数 | 类型 | 说明 |
|---|---|---|
| name | String | 参数名称 |
| description | String | 参数说明 |
| required | boolean | 是否必填 |
| example | String | 示例值 |
用于 Java Bean 或属性上,描述模型。
| 参数 | 类型 | 说明 |
|---|---|---|
| description | String | 模型描述 |
| requiredMode | RequiredMode | 是否必填 |
| example | String | 示例值 |
| hidden | boolean | 是否隐藏 |
Bearer your_token,注意 Bearer 后面有空格/login 获取 Token,然后在 Swagger UI 中配置WebConfiguration 中排除 Swagger 相关路径,确保可以正常访问文档页面