AI在线 AI在线

Swagger 全量注解应用指南:从@Tag到@SecurityScheme,全面掌握API设计

本文是Swagger注解的完整参考指南,详细解析了6大类40 个核心注解的使用方法和实战场景。 从基础的@Tag、@Operation到高级的@SecurityScheme、@Callback,每个注解都配有清晰的代码示例和实际应用案例。 包含全局配置、多安全方案、复杂响应结构、Webhook回调等企业级场景,帮助你构建专业级的API文档系统。

本文是Swagger注解的完整参考指南,详细解析了6大类40+个核心注解的使用方法和实战场景。从基础的@Tag、@Operation到高级的@SecurityScheme、@Callback,每个注解都配有清晰的代码示例和实际应用案例。包含全局配置、多安全方案、复杂响应结构、Webhook回调等企业级场景,帮助你构建专业级的API文档系统。

一、注解介紹

1. API 基本信息与分组注解

这些注解用于描述整个API或对接口进行分组,通常用在控制器类上。

注解

适用范围

属性

说明

示例

@Tag

name

: (必填)  标签名称。 description:标签描述。

用于对API操作进行逻辑分组。一个控制器可以有多个标签。在Swagger UI中显示为不同的分类。

@Tag(name = "用户管理", description = "用户的增删改查API")

@Hidden

类、方法

隐藏

被注解的类或方法,不会出现在生成的API文档中。

@Hiddenpublic class InternalController { ... }

2. 接口操作注解 (Operation Annotations)

这些注解用于描述具体的HTTP接口,用在控制器方法上。

注解

适用范围

属性

说明

示例

@Operation

方法

summary

:操作摘要。 description:详细描述。 method:指定HTTP方法(通常不需要,由@GetMapping等隐含)。 tags:覆盖类级别的标签,为该操作指定新的分组。

描述一个HTTP请求操作(如一个GET或POST端点),是方法上最重要的注解。

@Operation(summary = "创建用户", description = "根据传入的用户信息创建一个新用户")

@ApiResponse

方法

responseCode

: (必填)  HTTP状态码,如 "200", "404"。 description:响应的描述。 content:指定响应内容(使用@Content)。

声明一个操作可能返回的响应。通常与@Operation的responses属性一起使用,描述各种可能的返回结果。

@ApiResponse(responseCode = "404", description = "用户不存在")

@ApiResponses

方法

value

:一个@ApiResponse注解的数组。

当需要声明多个响应时,用它来包裹多个@ApiResponse。

@ApiResponses(value = {@ApiResponse(responseCode = "200", ...),@ApiResponse(responseCode = "400", ...)})

@Callback

方法

name

:回调名称。 callbackUrlExpression:回调URL表达式。

描述一个回调操作,用于Webhooks等异步通知场景,使用相对较少。

(略复杂,此处不展开示例)

3. 参数注解 (Parameter Annotations)

这些注解用于描述接口的入参,可以用在方法参数上。

注解

适用范围

属性

说明

示例

@Parameter

参数

description

:参数描述。 required:是否必填,默认为false。 example:提供示例值。 hidden:是否隐藏该参数。 schema:指定参数的schema(使用@Schema)。

描述一个操作参数,如@PathVariable, @RequestParam, @RequestHeader, @CookieValue等。注意:@RequestBody参数通常不用此注解,而是用@Schema。

public User getUserById(@Parameter(description = "用户ID", example = "123", required = true)@PathVariable Long id) {...}

@Parameters

方法

value

:一个@Parameter注解的数组。

当需要在方法上为多个参数添加描述时,用它来包裹多个@Parameter。

@Parameters({@Parameter(name = "id", description = "ID"),@Parameter(name = "name", description = "名称")})

@RequestHeader

参数

与@Parameter属性相同。

它是@Parameter的一个特殊化,专门用于描述请求头参数,会在UI上被单独分组显示。

@RequestHeader(@Parameter(description = "认证令牌", required = true)) String authToken

4. 请求体与内容注解 (Request Body & Content)

这些注解用于描述复杂的请求或响应内容。

注解

适用范围

属性

说明

示例

@RequestBody

参数

description

:请求体的描述。 required:是否必填。 content:指定请求体的媒体类型和结构(使用@Content)。

专门用于描述@RequestBody参数

。提供对请求体的详细说明。

@RequestBody(description = "用户信息", required = true, content = @Content(schema = @Schema(implementation = User.class))) User user

@Content

与@RequestBody或@ApiResponse的content属性一起使用

schema

:指定内容的schema(使用@Schema)。 mediaType:指定媒体类型,如 "application/json"。 examples:提供多个示例(使用@ExampleObject)。

定义请求或响应体的媒体类型和结构。

content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))

@Schema

模型类

、模型属性、参数

description

:描述。 example:提供示例值。 requiredMode:指定是否必须(Schema.RequiredMode.REQUIRED)。 implementation:指定关联的类(用于在@Content中)。 allowableValues:限制允许的值。

这是最重要的模型注解

。用于描述DTO(数据传输对象)、VO(值对象)等模型,或修饰@RequestBody/响应体的结构。

@Schema(description = "用户实体", requiredMode = Schema.RequiredMode.REQUIRED)public class User {@Schema(description = "用户ID", example = "1")private Long id;}

5. 安全方案注解 (Security Annotations)

用于描述API的认证和授权方式。

注解

适用范围

属性

说明

示例

@SecurityScheme

(配置类)

type

:安全方案类型(如SecurityScheme.Type.HTTP)。 scheme:方案(如 "bearer")。 bearerFormat:承载格式(如 "JWT")。 name:方案名称(用于@SecurityRequirement)。 in:ApiKey类型时,token的位置(SecurityScheme.In.HEADER)。

在配置类中定义全局的安全方案

,如JWT、OAuth2、ApiKey等。

见下方配置示例

@SecurityRequirement

、方法

name

:引用的安全方案名称。 scopes:所需的OAuth作用域(数组)。

声明一个操作或整个控制器需要哪些安全方案。在Swagger UI中会出现Authorize按钮。

@SecurityRequirement(name = "bearerAuth")

安全配置示例:

复制

二、swagger注解使用案例

1.  全局配置类 (OpenAPIConfig.java)

复制

2. 安全配置类

复制

3. 控制器

复制

4. 模型类

复制

5. 回调控制器

复制

6. Swagger注解总结

这个完整的案例包含了所有核心的Swagger注解:

6.1. 基本信息与分组

  • @Tag - API分组
  • @Hidden - 隐藏API

6.2. 接口操作

  • @Operation - 操作描述
  • @ApiResponse - 单个响应
  • @ApiResponses - 多个响应
  • @Callback / @Callbacks - 回调操作

6.3. 参数描述

  • @Parameter - 参数描述
  • @Parameters - 多个参数
  • 所有 in 类型:PATH, QUERY, HEADER, COOKIE

6.4. 请求体与内容

  • @RequestBody - 请求体描述
  • @Content - 内容类型
  • @Schema - 数据模型
  • @ArraySchema - 数组结构
  • @ExampleObject - 示例对象

6.5. 安全方案

  • @SecurityScheme - 安全方案定义
  • @SecuritySchemes - 多个安全方案
  • @SecurityRequirement - 安全要求
  • 所有安全类型:HTTP, APIKEY, OAUTH2, OPENIDCONNECT
  • @OAuthFlows / @OAuthFlow / @OAuthScope - OAuth2流程

6.6. Schema高级特性

  • oneOf / allOf - 组合模式
  • accessMode - 访问模式
  • requiredMode - 必需模式
  • allowableValues - 允许值
  • format - 数据格式
  • pattern - 正则模式
  • minimum / maximum - 数值范围
  • minLength / maxLength - 长度限制
  • minItems / maxItems - 数组限制

相关资讯