要求数组在 Swagger Schema Object 定义中至少包含一个元素

Posted

技术标签:

【中文标题】要求数组在 Swagger Schema Object 定义中至少包含一个元素【英文标题】:Require array to contain at least one element in Swagger Schema Object definition 【发布时间】:2016-10-28 08:12:36 【问题描述】:

我的swagger.yaml 中有这样的架构对象定义:

User:
  type: object
  properties:
    username:
      type: string
      description: the user name
    colors:
      type: array
      items: 
        type: string,
        enum: [ "red", "blue", "green" ]
      
      description: user must have one or more colors associated
  required:
    - username
    - colors

但是,生成的服务器仍然乐于接受使用此架构对象作为不包含任何 colors 字段的必需主体参数的 POST 请求。

我能否以 color 字段在 User 架构对象中始终需要并且理想情况下还必须包含来自枚举的至少一个或多个项目的方式配置 Swagger?

【问题讨论】:

问题实际上是曾经从事该项目工作的人编写的自定义验证代码没有正确处理 Swagger 生成的注释,因此无法正常工作。投票结束我的问题,因为它因本问题范围之外的原因而消失。 【参考方案1】:

使用minItems: 1。此外,您可以在数组中强制执行 uniqueItems

    colors:
      type: array
      minItems: 1
      uniqueItems: true
      items:
        type: string
        enum: [ "red", "blue", "green" ]

【讨论】:

以上是关于要求数组在 Swagger Schema Object 定义中至少包含一个元素的主要内容,如果未能解决你的问题,请参考以下文章

Swagger 声明 schema = @Schema(implementation = Map.class) 将 Schema 表示为 swagger-ui 中的 String

如何创建包含不同类型数组的swagger架构

如何更新(删除)嵌套数组中的文档

compojure-api/schema/swagger 中的非必需参数?

如何从 Swagger API 声明生成 JSON-Schema

RestAssured 中的无效 JSON Schema 异常,同时针对来自 swagger 的模式进行验证