news 2026/5/10 9:31:02

springboot项目中与接口文档有关的注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot项目中与接口文档有关的注解

在 Spring Boot 项目中,Swagger(主流分为 Swagger 2/Springfox 和 OpenAPI 3/SpringDoc)是接口文档生成的核心框架,而Knife4j是基于 Swagger 的增强版(完全兼容 Swagger 注解,同时新增少量专属增强注解)。以下是完整的注解分类及详解,包含 Swagger 2、OpenAPI 3(Swagger 3)、Knife4j 增强注解,附使用场景和示例。

一、核心说明

框架/版本依赖核心注解归属包备注
Swagger 2(Springfox)springfox-swagger2io.swagger.annotations老版本主流,Spring Boot 2.6+ 需适配
OpenAPI 3(Swagger 3)springdoc-openapiio.swagger.v3.oas.annotations新版本标准,兼容 Spring Boot 3.x
Knife4j基于 Swagger 增强兼容上述所有 +com.github.xiaoymin美化UI、新增分组/权限等注解

二、Swagger 2(Springfox)核心注解(最常用)

1. 全局/配置类注解
注解作用使用位置
@EnableSwagger2启用 Swagger 2 功能SpringBoot 配置类上
@EnableSwagger2WebMvc非 WebFlux 场景启用 Swagger 2(适配 Spring MVC)配置类上
2. 接口类注解
注解作用示例
@Api标记 Controller 类,描述接口分组信息@Api(tags = "用户管理接口", description = "用户CRUD操作")
@ApiIgnore忽略当前类/方法/参数,不生成到接口文档中@ApiIgnore @RestController(忽略整个Controller)
3. 接口方法注解
注解作用示例
@ApiOperation描述接口方法的功能、备注、响应等@ApiOperation(value = "根据ID查询用户", notes = "仅返回已激活用户", httpMethod = "GET")
@ApiImplicitParams批量描述接口参数(配合@ApiImplicitParam使用)见下方参数示例
@ApiImplicitParam描述单个请求参数(路径、查询、请求头、表单等)见下方参数示例
@ApiResponses批量描述接口响应状态码(配合@ApiResponse使用)见下方响应示例
@ApiResponse描述单个响应状态码、信息、返回模型见下方响应示例
4. 参数/请求体注解
注解作用示例
@ApiImplicitParam单个参数描述(非实体参数)@ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "Long", paramType = "path"), @ApiImplicitParam(name = "token", value = "请求令牌", required = true, dataType = "String", paramType = "header")})
@ApiParam描述方法参数(直接加在参数前,替代@ApiImplicitParampublic User getUser(@ApiParam(value = "用户ID", required = true) @PathVariable Long userId)
@RequestBody标记请求体参数(非Swagger注解,但配合使用)public Result save(@ApiParam(value = "用户信息", required = true) @RequestBody User user)
5. 实体/字段注解
注解作用示例
@ApiModel描述实体类(请求体/响应体模型)@ApiModel(value = "UserDTO", description = "用户请求参数模型")
@ApiModelProperty描述实体字段的含义、是否必填、示例值、隐藏等@ApiModelProperty(value = "用户名", required = true, example = "zhangsan", hidden = false) private String username;
Swagger 2 完整示例
// 配置类@Configuration@EnableSwagger2publicclassSwagger2Config{@BeanpublicDocketcreateRestApi(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(newApiInfoBuilder().title("SpringBoot Swagger2 接口文档").description("用户管理模块接口").version("1.0").build()).select().apis(RequestHandlerSelectors.basePackage("com.example.controller"))// 扫描包.paths(PathSelectors.any()).build();}}// Controller@RestController@RequestMapping("/user")@Api(tags="用户管理接口",description="用户CRUD操作")publicclassUserController{@GetMapping("/{userId}")@ApiOperation(value="根据ID查询用户",notes="仅返回已激活的用户信息")@ApiImplicitParams({@ApiImplicitParam(name="userId",value="用户ID",required=true,dataType="Long",paramType="path"),@ApiImplicitParam(name="token",value="请求令牌",required=true,dataType="String",paramType="header")})@ApiResponses({@ApiResponse(code=200,message="查询成功",response=UserDTO.class),@ApiResponse(code=404,message="用户不存在"),@ApiResponse(code=500,message="服务器内部错误")})publicResult<UserDTO>getUser(@PathVariableLonguserId,@RequestHeaderStringtoken){// 业务逻辑returnResult.success(newUserDTO());}@PostMapping("/save")@ApiOperation(value="新增用户",notes="用户名不能为空,密码长度≥6")publicResult<Void>save(@ApiParam(value="用户信息",required=true)@RequestBodyUserDTOuserDTO){// 业务逻辑returnResult.success();}}// 实体类@ApiModel(value="UserDTO",description="用户新增请求参数")publicclassUserDTO{@ApiModelProperty(value="用户名",required=true,example="zhangsan",hidden=false)privateStringusername;@ApiModelProperty(value="密码",required=true,example="123456",hidden=true)// 隐藏密码privateStringpassword;@ApiModelProperty(value="年龄",required=false,example="20")privateIntegerage;// getter/setter}

三、OpenAPI 3(Swagger 3/SpringDoc)核心注解(新版本推荐)

OpenAPI 3 是 Swagger 的标准化版本(OAS 3.0),注解包为io.swagger.v3.oas.annotations,完全替代 Swagger 2,适配 Spring Boot 3.x,Knife4j 也完全兼容。

注解映射(对比 Swagger 2)
Swagger 2 注解OpenAPI 3 注解作用一致?补充说明
@Api@Tag@Tag(name = "用户接口", description = "...")
@ApiOperation@Operation@Operation(summary = "查询用户", description = "...")
@ApiImplicitParam@Parameter加在参数前或@Parameters
@ApiImplicitParams@Parameters批量包裹@Parameter
@ApiResponse@ApiResponse包路径不同,参数兼容
@ApiResponses@ApiResponses同上
@ApiModel@Schema加在实体类上,替代@ApiModel
@ApiModelProperty@Schema加在字段上,替代@ApiModelProperty
@ApiParam@Parameter加在参数前
@ApiIgnore@Hidden忽略类/方法/参数
OpenAPI 3 核心注解详解
注解作用使用位置示例
@OpenAPIDefinition全局配置(替代 Swagger 2 的ApiInfo配置类/启动类@OpenAPIDefinition(info = @Info(title = "OpenAPI 3 文档", version = "1.0", description = "..."))
@Tag标记 Controller 类(替代@ApiController 类上@Tag(name = "用户管理", description = "用户CRUD")
@Operation描述方法(替代@ApiOperation接口方法上@Operation(summary = "查询用户", description = "根据ID查用户", tags = {"用户管理"})
@Parameter描述单个参数(替代@ApiImplicitParam/@ApiParam方法参数前/@Parameters@Parameter(name = "userId", description = "用户ID", required = true, in = ParameterIn.PATH)
@Parameters批量描述参数(替代@ApiImplicitParams方法上@Parameters({@Parameter(...), @Parameter(...)})
@Schema描述实体类/字段(替代@ApiModel/@ApiModelProperty实体类/字段上类:@Schema(name = "UserDTO", description = "用户参数");字段:@Schema(description = "用户名", required = true, example = "zhangsan")
@ApiResponse描述响应(包路径:io.swagger.v3.oas.annotations.responses方法上/@ApiResponses@ApiResponse(responseCode = "200", description = "成功", content = @Content(schema = @Schema(implementation = UserDTO.class)))
@Hidden忽略元素(替代@ApiIgnore类/方法/参数/字段@Hidden @GetMapping("/test")
OpenAPI 3 完整示例
// 配置类(Spring Boot 3.x)@ConfigurationpublicclassOpenApi3Config{@BeanpublicOpenAPIcustomOpenAPI(){returnnewOpenAPI().info(newInfo().title("SpringBoot OpenAPI 3 接口文档").version("1.0").description("基于Knife4j增强的OpenAPI 3文档")).components(newComponents()// 全局请求头(如token).addParameters("token",newParameter().name("token").description("请求令牌").required(true).in(ParameterIn.HEADER.toString()).schema(newSchema().type("string"))));}}// Controller@RestController@RequestMapping("/user")@Tag(name="用户管理接口",description="OpenAPI 3 示例接口")publicclassUserController{@GetMapping("/{userId}")@Operation(summary="根据ID查询用户",description="仅返回已激活用户,需携带token请求头")@Parameters({@Parameter(name="userId",description="用户ID",required=true,in=ParameterIn.PATH),@Parameter(name="token",description="请求令牌",required=true,in=ParameterIn.HEADER)})@ApiResponses({@ApiResponse(responseCode="200",description="查询成功",content=@Content(schema=@Schema(implementation=UserDTO.class))),@ApiResponse(responseCode="404",description="用户不存在"),@ApiResponse(responseCode="500",description="服务器错误")})publicResult<UserDTO>getUser(@PathVariableLonguserId,@RequestHeaderStringtoken){returnResult.success(newUserDTO());}@PostMapping("/save")@Operation(summary="新增用户",description="用户名必填,密码≥6位")@ApiResponse(responseCode="200",description="新增成功")publicResult<Void>save(@Parameter(description="用户信息",required=true)@RequestBodyUserDTOuserDTO){returnResult.success();}}// 实体类@Schema(name="UserDTO",description="用户新增请求参数模型")publicclassUserDTO{@Schema(description="用户名",required=true,example="zhangsan")privateStringusername;@Schema(description="密码",required=true,example="123456",hidden=true)privateStringpassword;@Schema(description="年龄",required=false,example="20")privateIntegerage;// getter/setter}

四、Knife4j 专属增强注解

Knife4j 基于 Swagger/SpringDoc 扩展,除了兼容所有原生注解,还新增了分组、权限、文档导出等增强注解,核心如下:

注解作用使用位置示例
@EnableKnife4j启用 Knife4j 增强功能(替代@EnableSwagger2,兼容 OpenAPI 3)配置类上@Configuration @EnableKnife4j public class Knife4jConfig {...}
@ApiOperationSupportKnife4j 增强的方法注解(排序、忽略参数、多语言等)接口方法上@ApiOperationSupport(order = 1, ignoreParameters = "password")
@DynamicParameter动态参数注解(适配Map类型参数)方法/参数上@DynamicParameters(name = "params", properties = {@DynamicParameter(name = "key", value = "值", example = "test")})
@ApiSort接口分组排序(替代@ApiOperationSupport的 order)Controller 类上@ApiSort(1) @Tag(name = "用户接口")
Knife4j 增强示例(基于 OpenAPI 3)
@Configuration@EnableOpenApi// OpenAPI 3 启用@EnableKnife4j// 启用Knife4j增强publicclassKnife4jConfig{@BeanpublicOpenAPIcustomOpenAPI(){returnnewOpenAPI().info(newInfo().title("Knife4j 增强文档").version("1.0"));}}@RestController@RequestMapping("/user")@Tag(name="用户管理接口")@ApiSort(1)// 分组排序(1优先显示)publicclassUserController{@PostMapping("/save")@Operation(summary="新增用户")@ApiOperationSupport(order=1,// 方法排序ignoreParameters="password"// 忽略密码参数显示)publicResult<Void>save(@RequestBodyUserDTOuserDTO){returnResult.success();}// 动态参数(Map入参)@PostMapping("/dynamic")@Operation(summary="动态参数示例")@DynamicParameters(name="DynamicParam",properties={@DynamicParameter(name="name",value="名称",example="测试"),@DynamicParameter(name="value",value="值",example="123")})publicResult<Void>dynamic(@RequestBodyMap<String,Object>params){returnResult.success();}}

五、关键注意事项

  1. 版本兼容
    • Spring Boot 2.x 可混用 Swagger 2(springfox)或 OpenAPI 3(springdoc);
    • Spring Boot 3.x 仅支持 OpenAPI 3(springdoc),Knife4j 4.x 适配 Spring Boot 3.x。
  2. 敏感信息隐藏
    • 密码、令牌等字段用@Schema(hidden = true)(OpenAPI 3)或@ApiModelProperty(hidden = true)(Swagger 2)隐藏。
  3. Knife4j 访问地址
    • Swagger 2 + Knife4j:http://localhost:8080/doc.html(核心,替代原生swagger-ui.html);
    • OpenAPI 3 + Knife4j:同上,原生地址http://localhost:8080/swagger-ui/index.html
  4. 生产环境关闭
    @Profile({"dev","test"})// 仅开发/测试环境启用@Configuration@EnableKnife4jpublicclassKnife4jConfig{...}

六、核心依赖(Maven)

1. Swagger 2 + Knife4j(Spring Boot 2.x)
<!-- Swagger 2 核心 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- Knife4j 增强 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version></dependency>
2. OpenAPI 3 + Knife4j(Spring Boot 3.x)
<!-- SpringDoc OpenAPI 3 核心 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.2.0</version></dependency><!-- Knife4j 增强 OpenAPI 3 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency>

以上注解覆盖了接口文档生成的所有核心场景(分组、参数、响应、实体、动态参数、权限隐藏等),Knife4j 完全兼容 Swagger 原生注解,优先推荐使用 OpenAPI 3(Swagger 3)+ Knife4j 的组合,适配最新 Spring Boot 版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 2:56:23

智能缺陷跟踪系统的构建

缺陷管理的新范式 在软件测试领域&#xff0c;缺陷跟踪是确保产品质量的核心环节。随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术的快速发展&#xff0c;传统缺陷跟踪系统正逐步向智能化转型。本文旨在为软件测试从业者提供一个构建智能缺…

作者头像 李华
网站建设 2026/5/9 2:01:34

预测缺陷重现的机器学习模型在软件测试中的应用研究

缺陷重现的挑战与机器学习机遇 在软件测试实践中&#xff0c;缺陷重现始终是核心痛点。测试人员常遇到"偶现缺陷"——某些缺陷在特定条件下随机出现&#xff0c;难以稳定复现以进行根因分析。这类问题不仅拖延项目进度&#xff0c;还可能导致潜在线上风险。传统方法…

作者头像 李华
网站建设 2026/5/10 6:47:57

缺陷根因分析的AI辅助工具:从“救火”到“防火”的智能跃迁

软件测试的困境与AI的曙光 在敏捷开发与DevOps大行其道的今天&#xff0c;软件发布的频率空前加快&#xff0c;对软件质量的要求却有增无减。软件测试工程师常常陷入一个怪圈&#xff1a;他们能够高效地发现大量缺陷&#xff08;Bug&#xff09;&#xff0c;但对于“这个缺陷为…

作者头像 李华
网站建设 2026/5/9 1:56:06

AI生成高质量测试数据的秘诀

测试数据的智能化转型 在软件测试领域&#xff0c;高质量测试数据是确保应用稳定性和安全性的基石。传统手动数据生成方式常面临效率低下、覆盖面不足等挑战&#xff0c;而AI技术的引入&#xff0c;通过机器学习、生成对抗网络&#xff08;GAN&#xff09;和自然语言处理&…

作者头像 李华
网站建设 2026/5/8 5:36:16

通达信减仓卖出线 源码 贴图

{}VAR2:LLV(LOW,10); VAR3:HHV(HIGH,25); 减仓线: 3.2 ; 卖出线: 3.5; 动力线: EMA((CLOSE-VAR2)/(VAR3-VAR2)*4,4); 买入线: 0.3;{} DRAWTEXT(CROSS(动力线,减仓线),2.8,减仓 ), ,; DRAWTEXT(CROSS(动力线,卖出线),3.5,出局 ), , ; DRAWICON(CROSS(动力线,减仓线),3.4,2); DRA…

作者头像 李华
网站建设 2026/5/9 1:02:00

构建面向未来的智能监控测试基础设施

在数字化进程飞速发展的今天&#xff0c;软件系统的复杂度和迭代速度呈指数级增长。传统的软件测试方法&#xff0c;因其滞后性、高成本以及对人力资源的重度依赖&#xff0c;正日益面临严峻挑战。在此背景下&#xff0c;‌智能监控测试基础设施‌应运而生&#xff0c;它不仅是…

作者头像 李华