首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OpenAPI/Swagger定义数组项的排除类型?

如何使用OpenAPI/Swagger定义数组项的排除类型?
EN

Stack Overflow用户
提问于 2019-06-20 08:00:56
回答 1查看 2.5K关注 0票数 3

Swagger文档解释了如何定义包含混合类型的数组。,如["foo", 5, -2, "bar"]。但是,如何定义数组必须包含一种类型的项(字符串、["foo", "bar"])或另一种类型的项(整数、[5, -2])?

我尝试过这样做,但是Swagger UI无法呈现它,所以我想它是错误的:

代码语言:javascript
复制
      oneOf:
        - items:
          - $ref: '#/components/schemas/SchemaA'
        - items:
          - $ref: '#/components/schemas/SchemaB'
EN

回答 1

Stack Overflow用户

发布于 2019-06-20 08:30:13

首先,请记住,oneOf只支持OpenAPI 3.0 (openapi: 3.0.0),而不支持OpenAPI 2.0 (swagger: '2.0')。

您的场景可以使用oneOf来定义,如下所示:

代码语言:javascript
复制
oneOf:
  - type: array
    items:
      type: string
  - type: array
    items:
      type: integer
  - type: array
    items:
      $ref: '#/components/schemas/SchemaA'

在普通的JSON中,type: array可以从oneOf中移出并放在oneOf旁边,但我不确定OpenAPI是否允许这样做( OpenAPI规范在这一点上不清楚)。

代码语言:javascript
复制
type: array
oneOf:
  - items:
      type: string
  - items:
      type: integer
  - items:
      $ref: '#/components/schemas/SchemaA'

我试过了,但是Swagger不能渲染它

目前,Swagger并不自动生成oneOfanyOf模式的示例(参见本期)。解决方法是手动添加exampleoneOf

代码语言:javascript
复制
example: [1, 2, 3]  # <------
oneOf:
  - type: array
    items:
      type: string
  - type: array
    items:
      type: integer
  - type: array
    items:
      $ref: '#/components/schemas/SchemaA'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56681569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档