Swagger 注解 @ApiImplicitParams 和 @ApiImplicitParam 的用法

@ApiImplicitParams 用于定义多个参数,而@ApiImplicitParam 用于定义单个参数。这两个注解的作用都是描述接口的参数信息,使 Swagger 可以正确解析接口的参数并在 Swagger UI 中生成参数文档。

用 Apifox,节省研发团队的每一分钟

Swagger 注解 @ApiImplicitParams 和 @ApiImplicitParam 的用法

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

@ApiImplicitParams 用于定义多个参数,而@ApiImplicitParam 用于定义单个参数。这两个注解的作用都是描述接口的参数信息,使 Swagger 可以正确解析接口的参数并在 Swagger UI 中生成参数文档。

Swagger 注解 @ApiImplicitParams 和 @ApiImplicitParam 的用法
Swagger

ApiImplicitParams 使用场景

在以下情况下,使用@ApiImplicitParams 和@ApiImplicitParam 可以提高 API 文档的可读性:

  • 接口包含多个参数时,使用@ApiImplicitParams 定义所有参数
  • 单个参数需要详细描述时,使用@ApiImplicitParam
  • 参数比较复杂,包含多层嵌套结构时,使用这两个注解可以清晰描述参数结构
  • 接口参数需要进行验证时,可以通过注解指定参数的验证规则
  • 接口参数包含枚举值时,可以通过注解指定参数的枚举范围

用法介绍

@ApiImplicitParams 用法

@ApiImplicitParams 用于定义多个接口参数。


@ApiImplicitParams 的常见属性:

属性类型默认值说明
valueString参数集合的说明
dataTypeString参数类型
paramTypeString参数位置,可选 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 的常见属性:

属性类型默认值说明
nameString参数名
valueString参数说明
requiredbooleanFALSE是否必填
dataTypeString参数类型
paramTypeString参数位置,可选 path,query,body,header 或 form
defaultValueString默认值
allowableValuesString参数可取值,可指定范围或枚举

一个完整的@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 管理接口有时很不方便,缺乏一定的安全性和团队间的分享协作,所以我更推荐使用 ApifoxIDEA 插件。你可以在 IDEA 中自动同步 Swagger 注解到 Apifox,一键生成接口文档,多端同步,非常方便测试和维护,这样就可以迅速分享 API 给其他小伙伴。

Apifox 的 IDEA 插件
Apifox 的 IDEA 插件

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 项目同步。

Apifox Helper
Apifox Helper


当在 IDEA 项目中有接口信息变动,只需右键点击「 Upload to Apifox」一键即可完成同步,无需奔走相告。团队成员可在 Apifox 中看到同步后的最新内容。

Apifox 的 IDEA 插件同步接口
Apifox 的 IDEA 插件一键同步接口


现在出发去 JetBrains 插件市场 下载试试吧!或直接在 IDEA 内 「plugin」入口直接搜索 Apifox Helper

Apifox
Apifox 的接口调试界面



知识扩展:



参考链接:

Swagger 注解列表:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X