当前位置: 首页 > 知识库问答 >
问题:

通过Swagger/OpenAPI为additionalProperties指定多种类型

微生俊材
2023-03-14

我希望在OpenAPI中表示以下JSON对象:

{
  "name": "Bob",
  "age": 4,
  ...
}

属性的数量和属性名称不是完全预先确定的,所以我希望使用additionalProperties。然而,我不太确定它将如何通过OpenAPI/Swagger 2.0来表示。我试过这个:

Person:
  type: object
  additionalProperties:
    type:
      - int
      - string

或JSON等价物:

{
  "Person": {
    "type": "object",
    "additionalProperties": {
      "type": ["int", "string"]
    }
  }
}

但这不太管用。有没有办法保持我想要表示的JSON对象的结构,特别是字符串和整数,而不是任意对象类型?

共有1个答案

公冶安怡
2023-03-14

OpenAPI 3支持oneOf,因此您可以使用:

Person:
  type: object
  additionalProperties:
    oneOf:
      - type: string
      - type: integer

OpenAPI 2.0不支持多类型值。您最多只能使用无类型模式,这意味着附加属性可以是任何内容——字符串、数字、布尔值等等——但您无法指定确切的类型。

Person:
  type: object
  additionalProperties: {}

这相当于:

Person:
  type: object
 类似资料:
  • 虽然我看过OpenAPI规范中的例子: 我不明白为什么使用是地图/字典的正确模式。 规范中关于的唯一具体内容是: 以下属性取自JSON模式定义,但它们的定义已根据Swagger规范进行了调整。它们的定义与JSON模式中的定义相同,只有在原始定义引用JSON模式定义的情况下,才会使用模式对象定义。 项目 allOf 属性 附加属性

  • 我在使用OpenAPI 3定义可重用架构组件时遇到问题,这将允许包含多种类型的数组。每个项目类型都继承自同一个父类,但具有特定的子属性。这在SwaggerHub上的视图中似乎可以正常工作,但示例视图没有正确显示数据。 太长,读不下去了有没有办法在OpenAPI 3中定义包含不同对象类型的数组?

  • 我想为我的Swagger API创建一个递归规范。这个概念似乎没有出现在Swagger文档中,所以我怀疑这是不可能的。因此,我也愿意接受任何由Swagger支持的替代解决方案。 例如,我试图创建一个类似文档的结构。每个文档都有部分,每个部分都有文本和自己的部分。我计划使用这样的APIendpoint: http://a.b.com/docs/{文档ID} http://a.b.com/docs/{

  • 我有大约40个API,它们具有类似的基本响应结构,如下所示: 因此,我有一个基本响应类,采用T类型的泛型,如下所示: 因此,对于API A,它返回类型为的对象及其自己的字段,我将返回响应作为控制器中的API响应: 在控制器中:响应数据=新响应();ResponseEntity response=新的ResponseEntity 在swagger中有没有一种方法可以递归地指定响应对象的模型?例如,我

  • 使用OpenApi比Swagger的实际优势是什么? 我是openApi技术的新手,只是想知道openApi中有什么比Swagger更多的特性。网上的文件对我没有帮助。有人能帮帮我吗。

  • 在我的项目中,我包含了openapi依赖项,并让Quarkus生成openapi定义。是否可以将版本0的endpoint分组为一个定义,其余的endpoint分组为另一个定义? 我有一个设置,可以浏览到example.com/v0/docs/或example.com/v1/docs/。在不同版本中启动两个API实例很容易,但我认为不改变端口是不可能的。我希望所有endpoint都可以在同一个端口上