摘要:可动态地根据注解生成在线API文档。是一套基于 OpenAPI 规范构建的开源工具,可帮助设计、构建、记录及使用 Restful 接口。
目录
[TOC]
整合 Swagger-UI 接口文档
接口文档简介
Swagger-UI(音S歪戈):可动态地根据注解生成在线API文档。是一套基于 OpenAPI 规范构建的开源工具,可帮助设计、构建、记录及使用 Restful 接口。
作用: 前后端分离的情况下,只需少量注解即可生成一份自带 UI 界面的 Rest API 文档,包括接口需要的参数及返回值,还可直接对 API 调试。
整合 Swagger-UI 的步骤
- 添加项目依赖;
- 添加 Swagger-UI 的 Java 配置文件;
- 给 XxxController 添加 Swagger 注解;
- 修改 MyBatis Generator 注释的生成规则,运行代码生成器重新生成 model 实体类,给字段加上注解
@ApiModelProperty来取代原来的方法注释,(mapper 接口及其xml实现文件)。- 在 Generator 生成类中,读取并解析
generatorConfig.xml配置文件, - 指定自定义注释生成器
CommentGenerator类中的方法, - 使用
field.addJavaDocLine(),给实体类的字段添加注释、Swagger 注解@ApiModelProperty来取代原来的方法注释。
- 在 Generator 生成类中,读取并解析
- 访问Swagger-UI接口文档地址:http://localhost:8080/swagger-ui/index.html
配置文件
config/SwaggerConfig.java
1 | |
常用注解
@EnableSwagger2:打开 Swagger-UI,用于生成相关文档信息;@Api:修饰 Controller 类;@ApiOperation:修饰 Controller 类中的接口方法;@ApiParam:修饰接口参数;@ApiModelProperty:修饰实体类的属性,用于实体类是请求参数或返回结果时;@Schema注解:通常与Swagger或OpenAPI规范一起使用,用于为API模型(如请求体、响应体等)中的属性或整个模型提供元数据描述。这些描述信息对于生成API文档、客户端代码以及理解API的结构和用法非常有帮助。
CommentGenerator 自定义注释生成器
1 | |
参考:
Swagger 注解
基本信息注解
可用于:类、接口。
@OpenAPIDefinition:用于定义整个 API 文档的基本信息。info:指定@Info注解的对象,用于描述 API 文档的基本信息。
-
@Info:用于定义 API 文档的基本信息。 -
@Contact:用于定义 API 文档中的联系人信息。 @License:用于定义 API 文档中的许可证信息。
分组注解
@Tag:用于给 API 分组,用途类似于为 API 文档添加标签。- 可用于:方法、类、接口。
1 | |
请求方法注解
可用于:方法。
以下注解用于描述 API 的请求方法:
@Operation:用于描述 API 的操作。@RequestBody:用于描述操作的请求体。@ApiResponse:用于描述操作的响应结果。@Content:用于描述请求体或响应的内容。@Parameter:用于描述操作的输入参数。@Parameters
@Schema:用于描述数据模型的属性。- 可用于:方法、类、接口。
1 | |
路径注解
可用于:方法的参数。
以下注解用于描述 API 的路径:
@Path:用于定义路径参数。- 可用于:方法。
@PathVariable:用于描述路径参数。@RequestParam:用于描述查询参数。@RequestBody:用于描述请求体。
响应注解
可用于:方法。
以下注解用于描述 API 的响应结果:
@ApiResponse:用于描述响应结果。@Content:用于描述响应结果的内容。@Schema:用于描述数据模型的属性。- 可用于:方法、类、接口。
@Schema(description = "RPC 服务 - API 错误日志创建 Request DTO")
@Data
public class ApiErrorLogCreateReqDTO {
@Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long userId;
....
}