Springdoc 全部注解一文解释清楚


系列文章:
springboot-swagger详解
springboot-优美的Knife4j文档-Swagger进化
Spring Cloud Gateway 网关整合 Knife4j
SpringBoot之如何集成SpringDoc最详细文档

1. 核心注解

@Tag-Class类上

  • 作用:为控制器或方法分组,便于组织和分类 API。

  • 常用属性

    • name:标签名称。
    • description:标签描述信息。
    • externalDocs:外部文档链接(@ExternalDocumentation 类型)。
  • 示例

      @Tag(name = "策略库接口",description = "这是策略库的所有接口")
      @RestController
      @RequestMapping("/tacticsInfo")
      public class TacticsInfoController extends BaseController
      {
        // ...
       }
    

在这里插入图片描述

通过@Tag 的 name 属性进行分组排序

注:springdoc 本身并没有提供直接用于排序的注解,但可以通过以下方式实现对 API 文档的排序

  • 在生成的 OpenAPI 文档中,@Tag 的 name 属性会影响分组的顺序。按字母顺序排列。
  • 如果需要自定义顺序,可以在 name 中添加前缀(如数字)来控制顺序。
@Tag(name = "1. User", description = "用户相关操作")
@RestController
@RequestMapping("/users")
public class UserController { }

@Tag(name = "2. Order", description = "订单相关操作")
@RestController
@RequestMapping("/orders")
public class OrderController { }

2. 方法级别注解

@Operation-方法描述

  • 作用:描述一个 API 方法的功能。
  • 常用属性
    • summary:操作的简短描述。
    • description:操作的详细描述。
    • tags:所属的标签(数组)。
    • operationId:唯一标识符,用于区分不同的操作。
    • responses:定义响应信息(@ApiResponse 类型)。
    • parameters:定义请求参数(@Parameter 类型)。
    • requestBody:定义请求体(@RequestBody 类型)。
    • deprecated:是否标记为已废弃(布尔值)。
    • security:定义安全要求(@SecurityRequirement 类型)。
    • hidden:是否隐藏该操作(布尔值)。
  • 示例
      @Operation(summary = "查询策略库:tactics_info列表",description = "查询策略库:tactics_info列表-list接口")
      @RequiresPermissions("business:tacticsInfo:list")
      @GetMapping("/list")
      public TableDataInfo list(TacticsInfo tacticsInfo)
      {
        // ...
    }
    

在这里插入图片描述

@ApiResponse 和 @ApiResponses-方法的返回结果

  • 作用:描述 API 方法的响应结果。
  • 常用属性
    • responseCode:HTTP 响应码(如 “200”、“404”)。
    • description:响应的描述信息。
    • content:响应的内容类型(@Content 类型)。
    • headers:响应头信息(@Header 类型)。
    • links:链接信息(@Link 类型)。
  • 示例
    @Operation(summary = "创建用户", description = "根据用户信息创建新用户")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "成功创建用户"),
        @ApiResponse(responseCode = "400", description = "请求参数错误"),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // ...
    }
    

3. 参数相关注解

@Parameter-方法参数

  • 作用:描述方法参数的含义。
  • 常用属性
    • name:参数名称。
    • description:参数描述信息。
    • required:是否必填。
    • example:参数示例值。
    • in:参数位置(如 pathqueryheader 等)。
  • 示例
    @Operation(summary = "根据 ID 获取用户")
    @GetMapping("/{id}")
    public User getUserById(
        @Parameter(name = "id", description = "用户 ID", required = true, example = "1") 
        @PathVariable Long id) {
        // ...
    }
    

@Parameters方法参数(单个)

  • 作用:描述多个参数。
  • 常用属性:
    • name:参数名称。
    • description:参数的描述信息。
    • in:参数的位置(如 “query”、“path”、“header”、“cookie”)。
    • required:是否为必填参数(布尔值)。
    • schema:参数的数据类型(@Schema 类型)。
    • example:示例值。
    • deprecated:是否标记为已废弃(布尔值)。
  • 示例
    @Operation(summary = "搜索用户")
    @Parameters({
        @Parameter(name = "name", description = "用户名", in = ParameterIn.QUERY),
        @Parameter(name = "age", description = "用户年龄", in = ParameterIn.QUERY)
    })
    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam String name, @RequestParam Integer age) {
        // ...
    }
    

@RequestBody

  • 作用:用于描述 API 的请求体。
  • 常用属性
    • description:请求体的描述信息。
    • content:请求体的内容类型(@Content 类型)。
    • required:是否为必填请求体(布尔值)。
  • 示例
@RequestBody(
    description = "User object to be created",
    required = true,
    content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))
)

4. 实体模型相关注解

@Schema-描述实体类或字段的信息

  • 作用:描述实体类或字段的信息。
  • 常用属性
    • type:字段的数据类型(如 “string”、“integer”、“array”)。
    • format:字段的格式(如 “date-time”、“int64”)。
    • description:字段的描述信息。
    • example:字段的示例值。
    • defaultValue:字段的默认值。
    • required:是否为必填字段(布尔值)。
    • deprecated:是否标记为已废弃(布尔值)。
    • enum:枚举值列表。
    • implementation:指定类作为模型(仅用于复杂对象)。
  • 示例
    @Schema(description = "用户的基本信息")
    public class User {
        @Schema(description = "用户 ID", example = "1", required = true)
        private Long id;
    
        @Schema(description = "用户名", example = "John Doe", required = true)
        private String name;
    
        @Schema(description = "用户年龄", example = "25")
        private Integer age;
        // getters and setters
    }
    

5. 其他注解

@Hidden-隐藏某个类、方法或参数

  • 作用:隐藏某个类、方法或参数,不将其包含在生成的文档中。
  • 示例
    @Hidden
    @GetMapping("/internal")
    public String internalEndpoint() {
        return "This endpoint is ignored by springdoc.";
    }
    

6. 配置相关注解(不常用)

@OpenAPIDefinition-全局配置 OpenAPI 文档的元信息

  • 作用:全局配置 OpenAPI 文档的元信息。这个不常用,还是常用配置文件类型的
  • 常用属性
    • info:文档的基本信息(标题、版本、描述等)。
    • tags:全局标签定义。
    • servers:API 的服务器地址。
    • externalDocs:外部文档链接(@ExternalDocumentation 类型)。
  • 示例
    @OpenAPIDefinition(
        info = @Info(title = "用户管理系统", version = "1.0", description = "用户相关的 API 文档"),
        tags = {
            @Tag(name = "用户管理", description = "与用户相关的操作")
        },
        servers = {
            @Server(url = "http://localhost:8080", description = "本地开发环境")
        }
    )
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

7. 数据模型相关注解

@ArraySchema-用于描述数组类型的字段。

  • 参数

    • array:数组的元素类型(@Schema 类型)。
    • uniqueItems:是否唯一(布尔值)。
    • minItems:最小元素数量。
    • maxItems:最大元素数量。
  • 示例

@ArraySchema(
    array = @Schema(type = "string"),
    uniqueItems = true,
    minItems = 1,
    maxItems = 10
)
private List<String> tags;

@Xml-用于描述 XML 相关的元数据。

  • 参数

    • name:XML 元素名称。
    • namespace:XML 命名空间。
    • prefix:XML 前缀。
    • attribute:是否为属性(布尔值)。
  • 示例

@Xml(name = "user", namespace = "http://example.com/user")
private User user;

7. 总结

以下是 springdoc 常用注解的分类总结:

注解作用
@Tag为控制器或方法分组,便于组织和分类 API。
@Operation描述 API 方法的功能。
@ApiResponse描述单个响应结果。
@Parameter描述方法参数的含义。
@Schema描述实体类或字段的信息。
@Hidden隐藏某个类、方法或参数,不包含在生成的文档中。
@OpenAPIDefinition全局配置 OpenAPI 文档的元信息(标题、版本、描述等)。
1 Spring基本特征 6 2 Spring的组成 6 2.1 Spring的jar包 6 2.2 Spring配置文件 7 2.3 Spring API 8 3 Spring基本功能详解 8 3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认无参数) 14 3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的时机拓展: 15 3.4 Bean的作用域 16 Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype 17 3.4.3 Request 17 3.4.4 Session 18 3.4.5 Global session 18 3.4.6 指定Bean的初始化方法和销毁方法 18 Bean的初始化和销毁拓展: 18 Spring的IOC总结: 20 3.5 依赖注入(DI) 20 3.5.1 使用构造器注入 20 3.5.2 使用属性setting方法进行注入 21 3.5.3 装配list集合 22 3.5.4 装配set集合 22 3.5.5 装配map 22 3.5.6 装配Properties 23 3.6 注解注入 23 注解注入拓展: 23 3.6.1 @Autowired 26 3.6.2 @Qualifier 27 3.6.3 @Resource 27 3.6.4 @PostConstruct 28 3.6.5 @PreDestroy 28 注解注入拓展: 28 3.7扫描注入 30 注解扫描拓展: 32 Mvc用注解写: 34 Spring容器IOC和di的整个启动过程: 38 3.8 spring中的继承 38 拓展spring为类中的属性赋值: 40 小结: 47 面向接口编程: 47 4 面向切面编程 52 4.1 代理模式 52 代理模式拓展: 52 4.1.1 JDK动态代理 58 JDK动态代理拓展: 59 4.1.2 CGLIB做代理 66 CGLIB动态代理拓展: 68 4.1.3 Spring的动态代理 71 4.2 AOP编程 71 4.2.1概念: 71 SpringAOP概念拓展: 73 之前实现了目标方法的动态调用,现在来实现切面的动态调用。 74 4.2.2 AOP实现的两种模式 78 4.2.2.1 xml形式 78 XML形式拓展: 81 异常通知处理例子: 91 不用spring异常通知,另一种处理异常 96 4.2.2.2Aop注解形式(了解) 99 注解注入拓展: 103 5 Spring数据库 106 5.1 Spring+JDBC 106 5.1.1 Jdbc编程特点 106 5.1.2引入DataSource 106 5.1.3 核心类JdbcTemplate 106 5.1.4 使用JdbcTemplate 106 5.1.5 继承JdbcDaoSupport 107 5.1.6 使用properties文件 107 5.1.7 RowMapper的使用 107 拓展: 108 DataSource注入的三种方式: 108 5.1.8声明式事务管理 116 5.1.8.1Spring的事务管理器 117 5.1.8.2Spring事务的传播属性 117 5.1.8.3Spring事务的隔离级别 117 拓展: 118 5.1.8.4以XML配置的 形式 119 拓展: 120 5.1.8.5以注解方式配置 125 拓展: 127 5.1.9使用CGLIB以XML形式配置事务 130 5.2 Spring+Hibernate 131 5.2.1 HibernateTemplate模板 131 5.2.2 声明式事务 131 配置XML文件 131 拓展: 132 注解形式: 137 拓展: 138 6 Struts2+spring+hibernate 141 6.1 需要添加的jar包 141 6.2 Spring融合web服务器 141 6.3 struts.xml文件 143 6.4 OpenInSessionView 143 拓展: 144 实例: 146
SpringDoc是一款强大的API文档自动化工具,它支持多种注解来定制API文档的内容。以下是一些关键的注解: 1. **@Api**:用于标注整个API组或控制器,提供API的基本信息如标题、描述、版本等。 ```java @Api(value = "Your API Name", description = "API 描述") @ApiInfo(title = "API Title", version = "1.0", contact = @Contact(name = "Author")) ``` 2. **@ApiOperation**:用于标注HTTP方法(GET, POST, PUT等),定义操作名称、描述、返回值类型等。 ```java @ApiOperation(value = "获取用户信息", notes = "根据用户ID获取用户详情") ``` 3. **@ApiParam**:用于定义路径变量、请求头、请求体参数等的描述。 ```java @ApiParam(name = "userId", value = "用户的唯一标识") @ApiModelProperty(example = "123456") private Long userId; ``` 4. **@ApiResponse**:用于定义预期的响应结果,包括HTTP状态码、返回类型及异常情况。 ```java @ ApiResponse(code = 200, message = "成功", response = UserResponse.class) @ApiResponse(code = 404, message = "未找到用户", response = ErrorResponse.class) ``` 5. **@ApiModel** 和 **@ApiModelProperty**:用于模型类,描述类的属性及其意义。 ```java @ApiModel(description = "用户模型") public class User { @ApiModelProperty(position = 1, name = "username", required = true) private String username; } ``` 通过这些注解,你可以精细控制生成的文档结构和内容。SpringDoc还支持自定义模板和主题,以进一步个性化API文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值