Swagger 3 (OpenAPI 3.0) 常用注解大全

1. 控制器(Controller)相关注解

1.1 类级别注解

import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;

@RestController
@RequestMapping("/api/users")
@Tag(name = "用户管理", description = "用户管理相关接口")
@SecurityRequirement(name = "bearerAuth")
public class UserController {
    // 控制器方法
}

1.2 方法级别注解

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;

@Operation(summary = "获取用户详情", description = "根据ID获取用户详细信息")
@ApiResponses(value = {
    @ApiResponse(responseCode = "200", description = "成功获取用户信息", 
                 content = @Content(mediaType = "application/json", 
                 schema = @Schema(implementation = UserDTO.class))),
    @ApiResponse(responseCode = "404", description = "用户不存在"),
    @ApiResponse(responseCode = "500", description = "服务器内部错误")
})
@GetMapping("/{id}")
public ResponseEntity<UserDTO> getUserById(
    @Parameter(description = "用户ID", required = true) @PathVariable Long id) {
    // 方法实现
}

@Operation(summary = "创建用户", description = "创建一个新用户")
@PostMapping
public ResponseEntity<UserDTO> createUser(
    @io.swagger.v3.oas.annotations.parameters.RequestBody(
        description = "用户信息", required = true,
        content = @Content(schema = @Schema(implementation = CreateUserRequest.class))
    )
    @RequestBody CreateUserRequest request) {
    // 方法实现
}

2. 模型(DTO/实体类)相关注解

2.1 类级别注解

2.2 字段级别注解

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "用户信息DTO")
public class UserDTO {
    
    @Schema(description = "用户ID", example = "1")
    private Long id;
    
    @Schema(description = "用户名", example = "john_doe", required = true)
    private String username;
    
    @Schema(description = "用户邮箱", example = "[email protected]", required = true)
    private String email;
    
    @Schema(description = "用户角色", example = "ADMIN", allowableValues = {"USER", "ADMIN", "MANAGER"})
    private String role;
    
    @Schema(description = "创建时间", example = "2023-01-01T12:00:00Z", accessMode = Schema.AccessMode.READ_ONLY)
    private LocalDateTime createdAt;
    
    // 省略getter和setter
}

3. 枚举类型处理