Swagger 2.x 常用注释详解

Swagger 2.x 常用注释详解

别null了 1,058 2019-05-18

常用注解

注解说明使用位置
@Api协议集描述用于 controller 类上
@ApiOperation协议描述用在 controller 的方法上
@ApiImplicitParams非对象参数集用在 controller 的方法上
@ApiImplicitParam非对象参数描述用在 @ApiImplicitParams 的方法里边
@ApiParam对象参数描述用在 @ApiImplicitParams 的方法里边,定义接收的参数形式
@ApiModel描述返回对象的意义用在返回对象类上
@ApiModelProperty对象属性用在参数对象的字段上
@ApiResponses表示一组响应用在 controller 的方法上
@ApiResponse表达一个响应信息用在 @ApiResponses 里边
@ResponseHeader响应头用在 controller 的方法上

1. @Api

Api 用在类上,说明该类的作用。可以标记一个 Controller 类做为 swagger 文档资源,使用方式:

@Api(tags="用户相关接口")
@RestController
@RequestMapping(value="/api/user")
public class UserController {}

参数说明:

属性名描述
valueURL 的路径值
tags说明该类的作用,如果设置这个值、value的值会被覆盖
description对 api 资源的描述,在1.5版本后不再支持
basePath基本路径,可以不配置,在1.5版本后不再支持
position配置多个 Api 时可以改变显示的顺序位置,在1.5版本后不再支持
produces设置MIME类型列表(output),例:"application/json, application/xml",默认为空
consumes设置MIME类型列表(input),例:"application/json, application/xml",默认为空
protocols设置特定协议,例:http,https,ws,wss
authorizations获取授权列表(安全声明),如果未设置,则返回一个空的授权值
hidden默认为false, 配置为true 将在文档中隐藏

2. @ApiParam

用在请求方法中,描述参数信息,使用方式:

@PostMapping(value="/login")
@ApiOperation(value = "登录", notes="根据用户名、密码登录")
public UserModel login(@ApiParam(name = "model", value = "用户信息Model") UserModel model){}

参数说明:

属性名描述
name参数名,参数名称可以覆盖方法参数名称,路径参数(path)必须与方法参数一致
value参数的简要说明
defaultValue参数默认值
required属性是否必填,默认为false
allowableValues限制参数的可接受值。1.以逗号分隔的列表 2、范围值
access允许从 API 文档中过滤参数。
allowMultiple指定参数是否可以通过具有多个事件接受多个值,默认为false
hidden隐藏参数列表中的参数。
example单个参数示例
examples参数示例。仅适用于BodyParameters

3. @ApiOperation

用在方法上,说明方法的作用,每一个 URL 资源的定义,使用方式:

@PostMapping(value="/login")
@ApiOperation(value = "登录", notes="根据用户名、密码登入")
public ReturnBean login(String username, String password){}

参数说明:

属性名描述
value说明方法的用途、作用
notes方法的备注说明
tags操作标签,非空时将覆盖value的值
response响应类型(即返回对象)
responseContainer声明包装的响应容器(返回对象类型)。有效值为 "List", "Set","Map"
responseReference指定对响应类型的引用。将覆盖任何指定的 response() 类
httpMethod指定 HTTP 方法,"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"
position配置多个 Api 时可以改变显示的顺序位置,在1.5版本后不再支持
nickname第三方工具唯一标识,默认为空
produces设置MIME类型列表(output),例:"application/json, application/xml",默认为空
consumes设置MIME类型列表(input),例:"application/json, application/xml",默认为空
protocols设置特定协议,例:http,https,ws,wss
authorizations获取授权列表(安全声明),如果未设置,则返回一个空的授权值
hidden默认为 false, 配置为 true 将在文档中隐藏
responseHeaders响应头列表
code响应的 HTTP 状态代码。默认 200
extensions扩展属性列表

4. @ApiImplicitParams,@ApiImplicitParam

  • @ApiImplicitParams

    用在请求的方法上,表示一组参数说明。只有value一个属性,用来装多个@ApiImplicitParam

  • @ApiImplicitParam

    用在 @ApiImplicitParams 注解中,对请求参数进行详细说明

    示例:

    @PostMapping(value="/login")
    @ApiOperation(value = "登录检测", notes="根据用户名、密码判断该用户是否存在")
    @ApiImplicitParams({
          @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query", dataType = "String"),
          @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query", dataType = "String") 
    })
    public UserModel login(String username,String password){}
    

    参数说明:

    属性名描述
    name参数名,参数名称可以覆盖方法参数名称,路径参数(path)必须与方法参数一致
    value参数的汉字说明、解释
    required参数是否必须,默认为false
    paramType参数放在哪个地方
    dataType参数类型,默认string
    defaultValue参数的默认值
    allowableValues限制参数的可接受值。1.以逗号分隔的列表 2、范围值
    access允许从API文档中过滤参数
    allowMultiple指定参数是否可以通过具有多个事件接受多个值,默认为false
    example单个参数示例
    examples参数示例。仅适用于BodyParameters

    特别说明:

    1. paramType

      header: @RequestHeader(代码中接收注解)
      query: @RequestParam(代码中接收注解)
      path:用于restful接口,@PathVariable(代码中接收注解)
      body:JSON方式提交,也可以通过流的形式接收当前的请求数据(用 @RequestBody 之后流就会关闭了)
      form:以form表单的形式提交,仅支持POST(不常用)
      
    2. dataType

      // 官方说明:
      /**
      * The data type of the parameter.
      * <p>
      
    • This can be the class name or a primitive.
      */
      String dataType() default "";

    默认 string
    实测可选值为:
    string
    int
    float
    double
    boolean
    object(2.9.2版本有效)

    
    3. allowableValues
    
    - 以逗号分隔
    
      ```java
      @ApiImplicitParam(name = "state", value = "状态", paramType = "query", dataType = "int", allowableValues = "1,2,3")
      ```
    
    - 范围值(实测只在实体类属性中有效,方法参数中无效)
    
      ```java
      @ApiImplicitParam(name = "state", value = "状态", paramType = "query", dataType = "int", allowableValues = "range[1,10]")
    
      /*
      range[1,10]
      range[1,10)
      range(1,10)
      无穷使用 infinity 或 -infinity
      */
    
      // 官方说明:
      /**
       * Limits the acceptable values for this parameter.
       * <p>
       * There are three ways to describe the allowable values:
       * <ol>
       * <li>To set a list of values, provide a comma-separated list.
       * For example: {@code first, second, third}.</li>
       * <li>To set a range of values, start the value with "range", and surrounding by square
       * brackets include the minimum and maximum values, or round brackets for exclusive minimum and maximum values.
       * For example: {@code range[1, 5]}, {@code range(1, 5)}, {@code range[1, 5)}.</li>
       * <li>To set a minimum/maximum value, use the same format for range but use "infinity"
       * or "-infinity" as the second value. For example, {@code range[1, infinity]} means the
       * minimum allowable value of this parameter is 1.</li>
       * </ol>
       */
      String allowableValues() default "";
      ```
    
    
    
    

## 5. @ApiModel,@ApiModelProperty

  • @ApiModel

用在实体类上,表示对类的说明(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用 @ApiImplicitParam注解进行描述的时候)

参数说明:

属性名描述
value名称
description描述
parent父类 (class)
discriminator官方描述:支持模型继承和多态性。这是用作鉴别器的字段名。基于这个领域,可以断言需要使用哪种子类型。
subTypes子类型 {(class)}
reference官方描述:指定对相应类型定义的引用,覆盖指定的任何其他元数据
  • @ApiModelProperty

    用在属性上,描述响应类的属性

    参数说明:

    属性名描述
    value此属性的简要说明
    name允许覆盖属性名称
    allowableValues限制参数的可接受值。1.以逗号分隔的列表 2、范围值
    access允许从 API 文档中过滤属性
    notes备注
    dataType参数的数据类型。可以是类名或者参数名,会覆盖类的属性名称
    required参数是否必,默认为false
    position允许在类中对属性进行排序。默认为0
    hidden允许在 Swagger 模型定义中隐藏该属性
    example属性的示例
    readOnly将属性设定为只读
    reference指定对相应类型定义的引用,覆盖指定的任何参数值

示例:

@ApiModel(value = "登录用户信息")
public class UserDTO {
    @ApiModelProperty(value = "用户名")
    private String username;
}

6. @ApiResponses,@ApiResponse

  • @ApiResponses

    用在请求的方法上,表示一组响应。只有value一个属性,用来装多个@ApiResponse

  • @ApiResponse

    用在@ApiResponses中,一般用于表达一个错误的响应信息

    参数说明:

    属性名描述
    codeHTTP 状态码
    message错误信息
    response响应类,默认Void.class
    reference指定对相应类型定义的引用,覆盖指定的任何参数值
    responseContainer声明包装的响应容器(返回对象类型)。有效值为 "List", "Set","Map"
    responseHeaders响应头列表

示例:

@ResponseBody
@PostMapping(value="/update/{id}")
@ApiOperation(value = "修改用户信息", notes = "修改指定用户信息")
@ApiResponses({
    @ApiResponse(code=400,message="请求参数错误"),
    @ApiResponse(code=404,message="请求路径错误或不存在")
})
public ReturnBean update(@PathVariable String id, UserDTO user){}

7. @ResponseHeader

响应头设置,使用方法:

@ResponseHeader(name="head1",description="response head conf")

参数说明:

属性名描述
name响应头名称
description响应头描述
response响应类,默认Void.class
responseContainer声明包装的响应容器(返回对象类型)。有效值为 "List", "Set","Map"

8. @ApiIgnore

@ApiIgnore 注解主要作用在方法上,类上,参数上。该注解只有一个 value 属性,用于描述忽略参数的原因。

当作用在方法上时,方法将被忽略;作用在类上时,整个类都会被忽略;作用在参数上时,单个具体的参数会被忽略。

注意:这里忽略的意思是 swagger-ui.html 上不会显示对应的接口信息


# Java # Swagger # Open API