SpringDoc OpenAPI 3 常用注解详解

SpringDoc / OpenAPI 3 最常用注解 ,适配 Spring Boot 4 + springdoc-openapi 3.x,直接复制就能用。

一、核心常用注解(必掌握)

1. @Tag

作用 :给 Controller / 接口模块 打标签,用于分组显示。

Java 复制代码
@RestController
@RequestMapping("/user")
@Tag(name = "用户管理模块", description = "用户的增删改查接口")
public class UserController {
}

效果:Swagger UI 左侧会显示一个分组:用户管理模块


2. @Operation

作用 :描述单个接口方法,相当于接口说明。

Java 复制代码
@Operation(
    summary = "根据ID查询用户",
    description = "传入用户ID,返回用户详细信息",
    tags = {"用户管理模块"}
)
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
}

常用属性:

  • summary:接口简短说明

  • description:详细描述

  • tags:归属分组

  • method:请求方法(一般不用写,自动识别)

  • hidden:是否隐藏接口


3. @Parameter

作用 :描述路径参数 / 查询参数

Java 复制代码
@GetMapping("/{id}")
public User getUser(
    @Parameter(description = "用户ID", required = true, example = "1001")
    @PathVariable Long id
) {
}

常用属性:

  • description:参数说明

  • required:是否必填

  • example:示例值

  • hidden:隐藏参数


4. @ApiResponse / @ApiResponses

作用 :定义接口响应状态码与说明

Java 复制代码
@Operation(...)
@ApiResponses({
    @ApiResponse(responseCode = "200", description = "查询成功"),
    @ApiResponse(responseCode = "404", description = "用户不存在"),
    @ApiResponse(responseCode = "500", description = "服务器异常")
})
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
}

二、实体类常用注解

5. @Schema

作用 :描述DTO、实体类、字段的含义、示例、约束。

用在类上

Java 复制代码
@Schema(description = "用户信息实体")
public class User {
}

用在字段上

Java 复制代码
@Schema(description = "用户ID", example = "1001")
private Long id;

@Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED)
private String username;

常用属性:

  • description:字段说明

  • example:示例

  • requiredMode:是否必填

  • hidden:隐藏字段

  • minLength / maxLength:长度限制

  • format:格式(password、email 等)


三、实用增强注解

6. @Hidden

作用:隐藏某个接口、类、字段,不在 Swagger 显示。

Java 复制代码
@Hidden
@GetMapping("/internal")
public void internalApi() {
}

7. @Parameters

多个参数统一包裹(不常用,一般直接每个参数加 @Parameter

8. @RequestBody 搭配 OpenAPI

SpringDoc 会自动识别 @RequestBody,你只需要给 DTO 加 @Schema 即可。


四、完整示例(可直接复制)

Java 复制代码
@RestController
@RequestMapping("/user")
@Tag(name = "用户管理模块", description = "用户相关接口")
public class UserController {

    @Operation(
        summary = "根据ID查询用户",
        description = "根据用户唯一ID查询用户详情"
    )
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "成功"),
        @ApiResponse(responseCode = "404", description = "用户不存在")
    })
    @GetMapping("/{id}")
    public User getUser(
        @Parameter(description = "用户ID", required = true, example = "1001")
        @PathVariable Long id
    ) {
        return new User();
    }
}
Java 复制代码
@Schema(description = "用户信息")
public class User {

    @Schema(description = "用户ID", example = "1001")
    private Long id;

    @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED)
    private String username;
}

五、访问地址

启动后访问:

Plain 复制代码
http://localhost:端口/swagger-ui.html

(注:文档部分内容由 AI 生成)

相关推荐
Agent手记1 分钟前
终端消费数据自动采集与分析智能体的搭建思路:2026全链路技术架构与实战解析
java·开发语言·人工智能·ai·架构
-凌凌漆-7 分钟前
【Qt】qt延时
开发语言·qt
这是程序猿11 分钟前
mysql的安装教程
java·人工智能·windows·mysql
小Y._12 分钟前
Spring Boot 4.0 发布:Jackson 3 强制迁移、虚拟线程原生支持、弹性能力一文搞定
java
AI-小柒16 分钟前
磅上线!DataEyes 聚合平台正式接入 GPT-Image-2,开启多模态 AI 生成全新纪元
大数据·开发语言·数据库·人工智能·gpt·php
小此方22 分钟前
Re:从零开始的 C++ 进阶篇(四)工业级 C++ 编程:如何构建异常安全的健壮系统?(含案例分析)
运维·开发语言·c++·安全
SunnyDays101123 分钟前
Java 合并 Excel 文件的几种实用方法
java·合并 excel
❆VE❆26 分钟前
python基础篇(一):使用vscode搭建python相关环境
开发语言·vscode·python
t***54430 分钟前
如何确认 Clang 是否在 Dev-C++ 中成功应用
java·开发语言·c++
神探小白牙34 分钟前
3D饼图,带背景图和自定义图例(threejs)
开发语言·前端·javascript·3d·vue