Swagger 注解 传参

本贴最后更新于 2321 天前,其中的信息可能已经东海扬尘

[@Api]

@ Api 用于声明 Swagger 资源 API。 它有双重用途 - 它会影响资源列表_和_ API 声明。 只有使用 @ Api 注释的类才会被 Swagger 扫描。

在资源清单中,注释将转换为[资源对象]

在 API 声明中,它基本上将作为[API 声明]本身的基础。

JAX-RS 的用法是:

  1. @Api(tags = "区域:/area", description = "地区的增删查改")
  2. @RestController
  3. @RequestMapping(value = "area", produces = {"application/json;charset=UTF-8"})
  4. @ApiResponses(value = {
  5. @ApiResponse(code = 400, message = "系统异常", response = RedisService.class),
  6. @ApiResponse(code = 401, message = "测试异常", response = AreaMapper.class)
  7. })
  8. public class AreaController {
  9. ...
  10. }

 

_20180814171413png

[@ApiOperation]

@ ApiOperation 用于在 API 资源中声明单个操作。 操作被认为是路径和 HTTP 方法的唯一组合。 只扫描使用 @ ApiOperation 注释的方法并添加 API 声明。

注释将影响 Swagger 输出的两个部分,[API 对象],每个路径将创建一个,以及[操作对象],将根据 @ApiOperation 创建一个。 请记住,在使用 Servlet 时,@ Api 会在设置路径时影响 API 对象。

JAX-RS 的用法是
:

  1. @ApiOperation(value = "根据areaId获取地区", notes = "根据url的id来获取地区")
  2. @RequestMapping(value = " {areaId}", method = RequestMethod.GET)
  3. public Map<String, Object> getArea(@PathVariable("areaId") Integer areaId) {
  4. ...
  5. }

 

imagepng

[@ApiResponses], [@ApiResponse]

使用 HTTP 状态代码返回错误(或其他成功消息)是一种常见做法。 虽然操作的常规返回类型在[@ApiOperation]中定义,但应使用这些注释描述其余的返回代码。

@ ApiResponse 描述了具体的可能响应。 它不能直接在方法上使用,需要包含在 @ ApiResponses 的数组值中(无论是否有一个响应或更多)。

如果响应伴随身体,也可以描述身体模型(每个响应一个模型)。

用法(JAX-RS,Servlet 或其他)之间的使用没有区别:

  1. @ApiOperation(value = "根据areaId获取地区", notes = "根据url的id来获取地区")
  2. @ApiImplicitParam(value = "地区id", name = "areaId", required = true, dataType = "int", paramType = "path", defaultValue = "1", example = "1")
  3. @RequestMapping(value = " {areaId}", method = RequestMethod.GET)
  4. @ApiResponses(value = {
  5. @ApiResponse(code = 400, message = "系统异常", response = RedisService.class),
  6. @ApiResponse(code = 401, message = "测试异常", response = AreaMapper.class)
  7. })
  8. public Map<String, Object> getArea(@PathVariable("areaId") Integer areaId) {
  9. ...
  10. }

 

有关此注释,用法和边缘情况的更多详细信息,请查看 javadoc ([@ApiResponses], [@ApiResponse]**.

imagepng

[@ApiParam]

@ ApiParam 仅用于 JAX-RS 参数注释(@PathParam@ QueryParam@HeaderParam@ FormParam 和 JAX-RS 2,@ BeanParam)。 虽然 swagger-core 默认扫描这些注释,但 @ ApiParam 可用于添加有关参数的更多详细信息,或在从代码中读取时更改值。

在 Swagger 规范中,这转换为[参数对象]。

Swagger 将获取这些注释的 value() 并将它们用作参数名称,并根据注释设置参数类型。 对于 body 参数(JAX-RS 方法的单个输入参数),名称将自动设置为 body(根据 Swagger 规范的要求)。

如果存在,Swagger 还将使用 @ DefaultValue 的值作为默认值属性。

  1. @RequestMapping(method = RequestMethod.POST)
  2. public Map<String, Object> addArea(
  3. @ApiParam(value = "地区名称",required = true) String areaName,
  4. @ApiParam(value = "地区domain",required = true) @RequestBody Area area) {
  5. ...
  6. }

 

这里我们有两个参数。 第一个是 areaName,它是路径的一部分。 第二个是正文,在本例中是一个 Area 对象。 请注意,两个参数都将 required 属性设置为 true。 对于 @PathParam,这是多余的,因为默认情况下它是强制性的,不能被覆盖。

输出将是:

有关此注释,用法和边缘情况的更多详细信息,请查看 javadocs.

imagepng

[@ApiImplicitParam], [@ApiImplicitParams]

您可能希望手动描述操作参数。 这可能有多种原因,例如:

  • 使用不使用 JAX-RS 注释的 Servlet.
  • 想要隐藏定义的参数,并使用完全不同的定义覆盖它.
  • 描述在到达 JAX-RS 实现之前过滤器或其他资源使用的参数.

由于可以包含几个参数,@ ApiImplicitParams 允许多个 @ ApiImplicitParam 定义。

在 Swagger 规范中,这些转换为[Parameter Object]。

在隐式定义参数时,为 Swagger 的定义设置 namedataTypeparamType 是很重要的。

  1. @ApiImplicitParams({
  2. @ApiImplicitParam(name = "areaName", value = "地区名称", required = true, dataType = "string", paramType = "query"),
  3. @ApiImplicitParam(name = "priority", value = "地区编号", required = false, dataType = "string", paramType = "query"),
  4. @ApiImplicitParam(name = "id", value = "地区id", required = true, dataType = "long", paramType = "query")
  5. })
  6. @RequestMapping(value = "editArea", method = RequestMethod.POST)
  7. public Map<String, Object> editArea(Area area) {
  8. ...
  9. }

 

在上面的示例中,我们可以看到具有多个参数的 Servlet 定义。 dataType 可以是基元名称或类名称。 paramType 可以是 Swagger 支持的任何参数类型(有关更多详细信息,请参阅 javadoc 或规范).

imagepng

有关此注释,用法和边缘情况的更多详细信息,请查看 javadoc (@ApiImplicitParam@ApiImplicitParams).

[@ApiModel]

Swagger-core 在整个 API 内省中基于对它们的引用构建模型定义。 @ ApiModel 允许您操作模型的元数据,从简单的描述或名称更改到多态的定义。

这转换为 Swagger 规范中的[Model Object]。

在其基本功能中,您可以使用 @ ApiModel 来更改模型的名称并为其添加描述:

  1. @ApiModel(value = "区域domain",description = "区域的数据库模型")
  2. public class Area {
  3. ...
  4. }

 

我们将模型的名称从 Area 更改为 区域domain

为了支持多态和继承,我们使用 discriminatorsubTypes 字段。 两者都必须用于 Swagger 输出才有效。

“discriminator”字段必须是顶部模型中的字段,该字段将用于确定正在使用哪个子模型。 例如,如果您有一个 Animal 类,其中 CatDogChicken 作为子类,则 animalType 字段可以用作鉴别器来确定实际使用的是哪种动物。

subTypes 必须列出继承模型的类。 类本身不必从超类型继承。 事实上,Swagger 不会自动读取扩展类,你必须在 subTypes 中手动描述这些类,以便对它们进行解析。

  1. @ApiModel(value="SuperModel", discriminator = "foo", subTypes = {SubModel.class})
  2. public class SuperModel {...}
  3. @ApiModel(value="SubModel")
  4. public class SubModel {...}

 

上面的代码片段是一个如何描述继承的简单示例。 注意 SubModel 不会扩展 SuperModel。 以同样的方式,您可以添加多个继承类。 可以有任意数量的继承级别

imagepng

For further details about this annotation, usage and edge cases, check out the javadocs.

[@ApiModelProperty]

虽然 swagger-core 将内省字段和 setter / getter,但它也会读取和处理 JAXB 注释。 @ ApiModelProperty 允许控制 Swagger 特定的定义,例如允许的值和附加注释。 如果您想在某些情况下隐藏属性,它还提供其他过滤属性。

有关 Swagger Spec 中的相关信息,请查看 Property Object.

  1. @ApiModel(value = "区域domain",description = "区域的数据库模型")
  2. public class Area {
  3. @ApiModelProperty(value = "区域id", required = true, position = 1, example = "1")
  4. private Integer areaId;
  5. @ApiModelProperty(value = "区域名称", required = true, position = 2, example = "北京")
  6. private String areaName;
  7. @ApiModelProperty(value = "区域编号", required = true, position = 3, example = "10001")
  8. private Integer priority;
  9. @ApiModelProperty(value = "添加时间", required = false, position = 4, example = "2017-02-02")
  10. private Date createTime;
  11. @ApiModelProperty(value = "最后修改时间", required = false, position = 5, example = "2017-02-02")
  12. private Date lastEditTime;
  13. }

 

这是向模型属性添加简短描述的简单示例。 还可以观察到,虽然 status 是一个 String,但我们将其记录为只有三个可能的值。

imagepng

有关此注释,用法和边缘情况的更多详细信息,请查看 javadocs.

Name Description
@Api 将类标记为Swagger资源.
@ApiImplicitParam 表示API操作中的单个参数。
@ApiImplicitParams 一个包装器,允许列出多个ApiImplicitParam对象。
@ApiModel 提供有关Swagger模型的其他信息。
@ApiModelProperty 添加和操作模型属性的数据.
@ApiOperation 描述针对特定路径的操作或通常是HTTP方法.
@ApiParam 鈥为操作参数添加其他元数据.
@ApiResponse 描述操作的可能响应.
@ApiResponses 鈥一个包装器,允许列出多个ApiResponse对象.
@Authorization 鈥声明要在资源或操作上使用的授权方案.
@AuthorizationScope 鈥描述OAuth2授权范围.
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 5 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...