@ApiImplicitParams 用于定义多个参数,而@ApiImplicitParam 用于定义单个参数。这两个注解的作用都是描述接口的参数信息,使 Swagger 可以正确解析接口的参数并在 Swagger UI 中生成参数文档。
ApiImplicitParams 使用场景
在以下情况下,使用@ApiImplicitParams 和@ApiImplicitParam 可以提高 API 文档的可读性:
- 接口包含多个参数时,使用@ApiImplicitParams 定义所有参数
- 单个参数需要详细描述时,使用@ApiImplicitParam
- 参数比较复杂,包含多层嵌套结构时,使用这两个注解可以清晰描述参数结构
- 接口参数需要进行验证时,可以通过注解指定参数的验证规则
- 接口参数包含枚举值时,可以通过注解指定参数的枚举范围
用法介绍
@ApiImplicitParams 用法
@ApiImplicitParams 用于定义多个接口参数。
@ApiImplicitParams 的常见属性:
属性 | 类型 | 默认值 | 说明 |
value | String | 参数集合的说明 | |
dataType | String | 参数类型 | |
paramType | String | 参数位置,可选 path,query,body,header 或 form |
其中的@ApiImplicitParam 数组包含多个参数定义,示例如下:
@ApiImplicitParams({
@ApiImplicitParam(name="param1", value="参数1"),
@ApiImplicitParam(name="param2", value="参数2")
})
一个完整的@ApiImplicitParams 示例:
@ApiImplicitParams({
@ApiImplicitParam(
name = "username",
value = "用户名",
required = true,
dataType = "String",
paramType = "query"
),
@ApiImplicitParam(
name = "password",
value = "密码",
required = true,
dataType = "String",
paramType = "query"
)
})
@ApiImplicitParam 用法
@ApiImplicitParam 用于定义单个接口参数。
@ApiImplicitParam 的常见属性:
属性 | 类型 | 默认值 | 说明 |
name | String | 参数名 | |
value | String | 参数说明 | |
required | boolean | FALSE | 是否必填 |
dataType | String | 参数类型 | |
paramType | String | 参数位置,可选 path,query,body,header 或 form | |
defaultValue | String | 默认值 | |
allowableValues | String | 参数可取值,可指定范围或枚举 |
一个完整的@ApiImplicitParam 示例:
@ApiImplicitParam(
name = "username",
value = "用户名",
required = true,
dataType = "String",
paramType = "query",
defaultValue = "guest"
)
实践案例
在 SpringBoot 中的配置如下:
@RestController
@RequestMapping("/api")
public class UserController {
@ApiOperation("用户注册接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "age", value = "年龄", required = false, dataType = "int", paramType = "form"),
})
@PostMapping("/user/register")
public String register(String username, String password, Integer age) {
// 获取参数
// 省略参数校验
// 注册逻辑处理
return "success";
}
}
在这个案例中,我给出了一个用户注册接口的代码,使用@ApiImplicitParams 注解定义了 3 个接口参数:
- username:用户名,字符串,必填,form 表单参数
- password:密码,字符串,必填,form 表单参数
- age:年龄,整数,非必填,form 表单参数
在方法参数中获取了这 3 个参数,这样就可以使 Swagger 文档中正确生成这 3 个参数的定义。
注意事项
- @ApiImplicitParam 和@ApiImplicitParams 不能同时使用,两者只能选择其一
- name 属性必填,对应参数名
- 如果方法参数与注解的参数名不一致,需要通过@RequestParam 指定参数名
- dataType 需要正确设置参数类型,否则 Swagger UI 无法显示参数类型
常见问题
Q: Swagger UI 不能显示参数定义?
A: 需要确保启动类添加了@EnableSwagger2 注解,并且配置了 Swagger。
Q: 参数显示类型不正确?
A: 检查@ApiImplicitParam 中的 dataType 是否设置正确。
Swagger 和 Apifox 整合
Swagger 管理接口有时很不方便,缺乏一定的安全性和团队间的分享协作,所以我更推荐使用 Apifox 的 IDEA 插件。你可以在 IDEA 中自动同步 Swagger 注解到 Apifox,一键生成接口文档,多端同步,非常方便测试和维护,这样就可以迅速分享 API 给其他小伙伴。
Apifox 是一个比 Postman 更强大的接口测试工具,Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。
Apifox 的 IDEA 插件可以自动解析代码注释,并基于 Javadoc、KDoc 和 ScalaDoc 生成 API 文档。通过 IntelliJ IDEA 的 Apifox Helper 插件,开发人员可以在不切换工具的情况下将他们的文档与 Apifox 项目同步。
当在 IDEA 项目中有接口信息变动,只需右键点击「 Upload to Apifox」一键即可完成同步,无需奔走相告。团队成员可在 Apifox 中看到同步后的最新内容。
现在出发去 JetBrains 插件市场 下载试试吧!或直接在 IDEA 内 「plugin」入口直接搜索 Apifox Helper。
知识扩展:
参考链接:
Swagger 注解列表:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X