json 如何在OpenAPI中创建一个只有3个元素(字符串)的数组,其中2个是枚举?

egmofgnx  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(191)

我试图定义的请求体的一部分有一个“filters”字段,它是一个正好由3个字符串组成的数组。
其中两个字符串来自枚举(不同的枚举列表)。
我试过oneOfanyOf,但我不认为它们是正确的。allOf选项对我来说很困惑,但我确实希望item列表中的“所有”项目显示一次。

filter:
 type: array
 uniqueItems: true
 items:
  allOf:
   - title: item 1
     type: string
     enum:
      - option A
      - option B
   - title: item 2
     type: string
     enum:
      - option C
      - option D
   - title: item 3
     type: string

字符串
当我渲染这个时,我得到一个枚举,包括选项A-D,我只能选择其中之一。

x6yk4ghg

x6yk4ghg1#

如果你想在一个特定的索引中的项目,OAS 3.0.x不允许一个项目数组,因为OAS规范修改了他们的JSON模式草案04规范的定义。它只允许items是一个对象。
如果您同意使用OAS 3.1.0,以下内容适用于特定索引中定义的项。这是基于JSON Schema 2020-12,与OAS 3.1.0完全兼容

openapi: 3.1.0
paths:
  '/thing':
    post:
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/filterRequest'

components:
  schemas:
    filterRequest:
      type: object
      properties:
        filter:
          type: array
          uniqueItems: true
          prefixItems:
            - title: item 1
              enum:
                - option A
                - option B
            - title: item 2
              enum:
               - option C
               - option D
            - title: item 3
              type: string

字符串
// {"filter": [ "option A", "option C", "test"]}

相关问题