swagger的详细注解

​
|    **作用范围**    |      **API**       |                       **API常用参数**                        |         **作用位置**         |
| :----------------: | :----------------: | :----------------------------------------------------------: | :--------------------------: |
|     协议集描述     |        @Api        |              @Api(tags = {"tag1","tag2","..."})              |         controller类         |
|      协议描述      |   @ApiOperation    |       @ApiOperation(value = "功能描述",notes = "备注")       |      controller类的方法      |
| 描述返回对象的意义 |     @ApiModel      |         @ApiModel(value="类名",description="类描述")         |          返回对象类          |
|      对象属性      | @ApiModelProperty  | @ApiModelProperty(value = "类属性描述",required = *true*,example = "属性举例",notes = "备注") |      出入参数对象的字段      |
|    非对象参数集    | @ApiImplicitParams | @ApiImplicitParams({@ApiImplicitParam(),@ApiImplicitParam(),...}) |       controller的方法       |
|   非对象参数描述   | @ApiImplicitParam  | @ApiImplicitParam(name = "参数名",value = "参数描述",required = *true*,paramType = "接口传参类型",dataType = "参数数据类型") | @ApiImplicitParams的方法里用 |
|     Response集     |   @ApiResponses    |    @ApiResponses({     @ApiResponse(),@ApiResponse(),..})    |       controller的方法       |
|      Response      |    @ApiResponse    |       @ApiResponse(code = 10001, message = "返回信息")       |      @ApiResponses里用       |
|      忽略注解      |     @ApiIgnore     |                          @ApiIgnore                          |      类,方法,方法参数      |

API使用详细说明

@Api

作用:用来指定接口的描述文字
修饰范围:作用在类上
@Api(tags = "TestController测试")
@RestController
public class TestController {
    ....
}

@ApiOperation

作用:用来对接口中具体方法做描述
修饰范围:作用在方法上
@ApiOperation(value = "接口总体描述",notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@GetMapping("/")
public String login(String... index) {
    return "Hello login ~";
}
value:用来对接口的总体描述
notes:用来对接口的详细描述

@ApiImplicitParams

作用:用来对接口中参数进行说明
修饰范围:作用在方法上
参数:@ ApiImplicitParam数组

@ApiImplicitParam

作用:修饰接口方法里面的参
修饰范围:作用方法上
参数
  • name方法参数名称
  • value:方法参数的描述
  • dataType:方法参数数据类型
  • defaultValue :方法参数默认值(给测试人员做测试用的)
  • paramType :
    • 默认query:对应方式一
    • path:对应方式二
    • body:对应方式三

方式一:url?id=1&user='qlh'后面参数

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "username", value = "用户名", dataType = "String", defaultValue = "qlh"),
        @ApiImplicitParam(name = "password", value = "密码", dataType = "String", defaultValue = "123")
})
@PostMapping("/")
public String login(String username, String password) {
    return "Hello login ~";
}

方式二:url/1/2路径后 传参 在路径中获取参数

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "id", dataType = "String", defaultValue = "qlh",paramType = "path"),
        @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", defaultValue = "123",paramType = "path")
})
@PostMapping("/index/{id}/{name}")
public String index(@PathVariable("id") String id, @PathVariable("name") String name) {
    return "Hello World ~";
}

方式三:在body中传参

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "id", dataType = "String", defaultValue = "xxx", paramType = "body"),
        @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", defaultValue = "123", paramType = "body")
})
@PostMapping("/index")
public String index(@RequestBody Map<String, Object> map) {
    return "Hello World ~";
}

@ApiResponses

作用:用于接口的响应结果
修改范围:作用在接口方法上
参数:@ ApiResponse数组
@ApiResponses({
        @ApiResponse(),
        @ApiResponse(),
        ...
})

@ApiResponse

作用:在ApiResponses里面对响应码以及响应内容进行设置
修饰范围:作用接口方法上
参数
  • code:响应状态码
  • message:响应状态码对应的响应内容
@ApiResponse(code = 10001, message = "签名错误"),
@ApiResponse(code = 10002, message = "sql错误"),
@ApiResponse(code = 10003, message = "服务怠机,请稍后重试"),

@ApiIgnore

作用:忽略类,方法,参数。(忽略的意思:在 swagger-ui.html中不显示)
修改范围:作用在类,方法,参数上
@ApiIgnore

实体类中swagger注解

@ApiModel

作用:用来对实体类进行说明
修饰范围:作用在类上
@ApiModel(value="类名",description = "实体类描述")

@ApiModelProperty

作用:用来对实体类中的属性进行说明
修饰范围:作用在类中的属性上
@ApiModelProperty(value = "类属性描述",required = true,example = "属性举例",notes = "备注")

结束语

至此 springboot集成swagger2就讲完了,我相信,看完我这两篇文章之后的朋友,你们就能很熟练的在java代码中使用swagger了。
因为目前 前后端分离比较流行,所以写一个好的 swagger接口文档是很有必要的,这样就会减少前后端因为一些接口表述不清楚,导致的后端开发人员来回和前端人员交流沟通,大大的提高了开发的效率。

 

<think> 我们被要求回答关于Swagger3注解的介绍。根据引用[1]中提到的Swagger2注解,我们可以类比Swagger3的注解。需要注意的是,Swagger3实际上是OpenAPI 3.0规范的一种实现,而Swagger2对应的规范是OpenAPI 2.0(即Swagger 2.0)。在Swagger3中,我们通常使用`springfox`或者`springdoc-openapi`(对于Spring Boot项目)来生成文档,而注解主要来源于`io.swagger.v3.oas.annotations`包。 引用[1]中提到的Swagger2注解Swagger3注解的对应关系如下(注意:Swagger3注解包路径为`io.swagger.v3.oas.annotations`): - @Api → @Tag - @ApiOperation → @Operation - @ApiParam → @Parameter - @ApiModel → @Schema - @ApiModelProperty → @Schema(用于字段上) - @ApiResponse → @ApiResponse - @ApiResponses → @ApiResponses(在Swagger3中仍然存在,但内部使用@ApiResponse) 另外,Swagger3还引入了一些新的注解,例如@ParameterObject(用于将多个参数封装为对象)等。 下面详细介绍Swagger3中常用的注解: 1. **@Tag**:用于类上,表示对控制器的描述。可以设置name(标签名)、description(描述)等属性。 ```java @Tag(name = "用户管理", description = "用户相关的API") @RestController public class UserController { ... } ``` 2. **@Operation**:用于方法上,描述一个操作(接口)。 ```java @Operation(summary = "创建用户", description = "根据传入的用户信息创建新用户") @PostMapping("/users") public User createUser(@RequestBody User user) { ... } ``` 3. **@Parameter**:用于参数上,描述单个参数。可以放在方法参数前,也可以放在@Operation注解的parameters属性中(用于描述不在方法参数中的参数,如header参数)。 ```java public ResponseEntity<User> getUser( @Parameter(description = "用户ID", required = true) @PathVariable("id") Long id) { ... } ``` 4. **@Schema**:用于描述模型(DTO)或模型属性。可以用于类上(代替@ApiModel)或者字段上(代替@ApiModelProperty)。 ```java @Schema(description = "用户实体") public class User { @Schema(description = "用户ID", example = "1001") private Long id; @Schema(description = "用户名", example = "张三") private String name; // 省略getter/setter } ``` 5. **@ApiResponse**和@ApiResponses:用于方法上,描述接口的响应。在Swagger3中,这两个注解仍然保留,用法类似。 ```java @Operation(summary = "删除用户") @ApiResponses(value = { @ApiResponse(responseCode = "204", description = "删除成功"), @ApiResponse(responseCode = "404", description = "用户不存在") }) @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable Long id) { ... } ``` 6. **@RequestBody**:虽然不是Swagger3特有,但在Swagger3中,我们可以使用@io.swagger.v3.oas.annotations.parameters.RequestBody注解详细描述请求体(通常与@Schema配合使用)。 ```java @Operation(summary = "更新用户") public User updateUser( @Parameter(description = "用户ID") @PathVariable Long id, @RequestBody(description = "用户更新信息", required = true, content = @Content(schema = @Schema(implementation = User.class))) @RequestBody User user) { ... } ``` 7. **@Hidden**:用于隐藏某个接口或者模型,使其不出现在文档中。可以用于类、方法或字段上。 ```java @Hidden @GetMapping("/internal") public String internalApi() { ... } ``` 8. **@SecurityScheme**:用于定义安全方案,如API Key、OAuth2等。通常用在配置类上。 ```java @SecurityScheme( name = "BearerAuth", type = SecuritySchemeType.HTTP, scheme = "bearer", bearerFormat = "JWT" ) public class OpenApiConfig { ... } ``` 9. **@SecurityRequirement**:用于在接口上指定安全要求,与@SecurityScheme中定义的name对应。 ```java @Operation(summary = "获取用户列表", security = @SecurityRequirement(name = "BearerAuth")) @GetMapping("/users") public List<User> getUsers() { ... } ``` 10. **@ParameterObject**:这是springdoc-openapi提供的注解(不是OpenAPI标准注解),用于将多个参数封装成一个对象,方便在Swagger UI中展示。 ```java @GetMapping("/users") public Page<User> getUsers(@ParameterObject Pageable pageable) { ... } ``` 注意:以上注解主要适用于使用`springdoc-openapi`的Spring Boot项目。如果使用其他框架,注解的使用方式可能略有不同。 总结:Swagger3(OpenAPI 3.0)的注解Swagger2相比,包路径和注解名称有所变化,但功能类似,并且增加了一些新的注解来支持OpenAPI 3.0的新特性。 引用[1]中提到的其他注解(如@ApiClass, @ApiError等)在Swagger3中可能已经被废弃或者不再使用。 下面提供一张主要注解的对比表: | Swagger2 注解 | Swagger3 注解 | 作用域 | 说明 | |---------------------|-------------------------|--------------|------------------------------| | @Api | @Tag | 类 | 描述控制器 | | @ApiOperation | @Operation | 方法 | 描述接口方法 | | @ApiParam | @Parameter | 参数 | 描述单个参数 | | @ApiModel | @Schema | 类(模型) | 描述请求/响应模型 | | @ApiModelProperty | @Schema | 模型属性 | 描述模型的属性 | | @ApiResponse | @ApiResponse | 方法 | 描述一个响应 | | @ApiResponses | @ApiResponses | 方法 | 包含多个@ApiResponse | | @ApiIgnore | @Hidden | 类、方法、属性| 隐藏某个元素 | 最后,请注意,Swagger3的注解规范由OpenAPI规范定义,具体实现可能因库的不同而有所差异。在实际使用中,请参考所使用库的文档。 相关问题: 1. 如何在Spring Boot项目中集成Swagger3? 2. Swagger3的注解Swagger2注解可以混用吗? 3. 如何用Swagger3描述文件上传接口? 4. 如何配置Swagger3生成OAuth2安全认证的文档? 5. 如何用Swagger3注解描述枚举类型? 引用: [^1]: Swagger3注解用法详解 </think>以下是 Swagger3(OpenAPI 3.0)核心注解详细说明及使用场景: ### 🏷️ 核心注解对照表(Swagger3 vs Swagger2) | **功能** | **Swagger2 注解** | **Swagger3 注解** | **使用位置** | **示例** | |------------------------|-------------------|----------------------------|--------------|----------| | **接口模块描述** | `@Api` | `@Tag` | Controller类 | `@Tag(name = "用户管理", description = "用户相关API")` | | **单接口描述** | `@ApiOperation` | `@Operation` | 接口方法 | `@Operation(summary = "创建用户", description = "通过JSON创建新用户")` | | **请求参数描述** | `@ApiParam` | `@Parameter` | 方法参数 | `@Parameter(description = "用户ID", required = true)` | | **DTO模型描述** | `@ApiModel` | `@Schema` | DTO类 | `@Schema(name = "User", description = "用户实体")` | | **DTO字段描述** | `@ApiModelProperty` | `@Schema` | DTO字段 | `@Schema(description = "用户名", example = "张三")` | | **响应状态码描述** | `@ApiResponse` | `@ApiResponse` | 接口方法 | `@ApiResponse(responseCode = "404", description = "用户不存在")` | | **多响应状态码包装** | `@ApiResponses` | `@ApiResponses` | 接口方法 | `@ApiResponses({@ApiResponse(...), @ApiResponse(...)})` | | **请求体描述** | - | `@RequestBody` | 方法参数 | `@RequestBody(description = "用户数据", required = true)` | | **安全方案** | - | `@SecurityScheme` | 配置类 | `@SecurityScheme(name = "JWT", type = SecuritySchemeType.HTTP, scheme = "bearer")` | --- ### 🧩 关键注解详解 #### 1. `@Tag` - 接口模块分组 ```java @Tag( name = "订单管理", description = "订单创建、查询和取消接口", externalDocs = @ExternalDocumentation(description = "详细文档", url = "https://docs.example.com") ) @RestController @RequestMapping("/orders") public class OrderController { ... } ``` #### 2. `@Operation` - 接口方法描述 ```java @Operation( summary = "创建订单", description = "需要用户认证令牌", tags = {"订单管理"}, responses = { @ApiResponse(responseCode = "201", description = "订单创建成功"), @ApiResponse(responseCode = "400", description = "无效输入") } ) @PostMapping public Order createOrder(@RequestBody OrderRequest request) { ... } ``` #### 3. `@Parameter` - 参数描述 ```java @GetMapping("/{id}") public Order getOrder( @Parameter( name = "id", description = "订单唯一ID", required = true, example = "ORD-2023-001" ) @PathVariable String id ) { ... } ``` #### 4. `@Schema` - 模型定义 ```java @Schema(name = "User", description = "系统用户实体") public class User { @Schema( description = "用户邮箱", example = "user@example.com", format = "email", maxLength = 100 ) private String email; @Schema( description = "用户状态", implementation = UserStatus.class, defaultValue = "ACTIVE" ) private String status; } ``` #### 5. 安全认证配置 ```java @SecurityScheme( name = "BearerAuth", type = SecuritySchemeType.HTTP, scheme = "bearer", bearerFormat = "JWT" ) public class OpenAPIConfig { ... } ``` --- ### 🔍 新增特性 1. **组件复用机制** 通过`@Schema(ref = "#/components/schemas/User")`引用预定义模型 2. **多媒体类型支持** ```java @Operation(responses = @ApiResponse( content = @Content( mediaType = "application/json", schema = @Schema(implementation = User.class), examples = @ExampleObject(value = "{'id':1,'name':'样例用户'}") ) )) ``` 3. **链接和回调** ```java @Operation(callbacks = { @Callback( name = "orderStatusCallback", callbackUrlExpression = "http://localhost:8080/notifications", operations = @Operation(method = "post", ...) ) }) ``` --- ### 🚀 使用建议 1. **组合使用示例** ```java @Tag(name = "支付接口") @RestController public class PaymentController { @Operation( summary = "发起支付", security = @SecurityRequirement(name = "BearerAuth"), parameters = @Parameter(name = "currency", description = "货币类型", example = "CNY"), responses = { @ApiResponse(responseCode = "200", ref = "#/components/responses/PaymentSuccess"), @ApiResponse(responseCode = "402", description = "余额不足") } ) @PostMapping("/pay") public PaymentResult pay(@RequestBody PaymentRequest request) { ... } } ``` 2. **DTO验证集成** ```java public class LoginRequest { @Schema(description = "登录账号", requiredMode = Schema.RequiredMode.REQUIRED) @NotBlank(message = "账号不能为空") private String username; } ``` --- ### ⚠️ 常见问题 **问题**:Swagger3无法显示枚举值 **解决方案**: ```java @Schema(implementation = OrderStatus.class) private String status; // 枚举字段 // 枚举类添加描述 public enum OrderStatus { @Schema(description = "已创建") CREATED, @Schema(description = "已支付") PAID } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值