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

如何使用OpenAPI/Swagger定义数组项的排除类型?,swagger,swagger-ui,openapi,Swagger,Swagger Ui,Openapi,,例如[foo,5,-2,bar]。但是,如何定义数组必须包含一种类型的项字符串[foo,bar]或另一种整数[5,-2] 我已经试过了,但Swagger UI无法呈现它,所以我猜这是错误的: oneOf: - items: - $ref: '#/components/schemas/SchemaA' - items: - $ref: '#/components/schemas/SchemaB' 首先,请记住,

,例如[foo,5,-2,bar]。但是,如何定义数组必须包含一种类型的项字符串[foo,bar]或另一种整数[5,-2]

我已经试过了,但Swagger UI无法呈现它,所以我猜这是错误的:

      oneOf:
        - items:
          - $ref: '#/components/schemas/SchemaA'
        - items:
          - $ref: '#/components/schemas/SchemaB'

首先,请记住,oneOf仅在OpenAPI 3.0 OpenAPI:3.0.0中受支持,但在OpenAPI 2.0中不受支持

您的场景可以使用以下方法之一定义:

其中一项: -类型:数组 项目: 类型:字符串 -类型:数组 项目: 类型:整数 -类型:数组 项目: $ref:'/components/schemas/SchemaA' 在vanilla JSON模式中,type:array可以从one of移出并与one of并排放置,但我不确定OpenAPI是否允许这样做,因为OpenAPI规范对此不清楚

类型:数组 其中一项: -项目: 类型:字符串 -项目: 类型:整数 -项目: $ref:'/components/schemas/SchemaA' 我已经试过了,但大摇大摆的用户界面无法呈现它

目前,Swagger UI不会自动为模式之一和模式之一生成示例,请参见。解决方法是在手动执行以下操作的同时添加一个示例:


示例:[1,2,3]我忘了提到数组是对象{my_property:one of array}的属性,其中一个应该在那里工作吗?有了这一点,问题不仅仅是这个例子。“架构”选项卡显示其中一个大括号,因此它看起来像对象,而不是数组。1是的,其中一个可用作属性架构。只需在通常放置类型的地方放置一个:。。。。2 schema选项卡显示其中一个内部大括号,因此它看起来像一个对象,而不是一个数组-这就是Swagger UI当前显示其中一个/任意模式的方式。有一个现有的特性要求改进oneOf/anyOf渲染-我认为这个问题已经在最新的Swagger UI版本中得到了解决。