【问题标题】:Swagger HashMap property typeSwagger HashMap 属性类型
【发布时间】:2013-04-16 17:01:12
【问题描述】:

有没有办法在模型部分定义 HashMap 或 Generic Object 类型? 我有一个返回产品的 REST 服务,这些产品可以有不同的选项。 options 属性基本上是一个 HashMap,其中 id 是选项名称,其值是选项值。

【问题讨论】:

  • 你用的是什么风格的 Swagger? (jax-rs、play 等)
  • @Eyal :我们正在使用 swagger-ui 并且有同样的问题。您有解决方案或解决方法吗?
  • @JanHartung 不,我们的 api 中没有太多地图...您可能想订阅this feature request in the swagger issue tracking system.

标签: dictionary swagger openapi


【解决方案1】:

是的,这是可能的。

在 OpenAPI (fka. Swagger) 2.0 和 3.0 中,hashmap 始终是 <string, something> 映射:

  • 键始终是字符串,不需要定义。
  • 值类型是你想要的,用additionalProperties定义。

假设你想描述一个像这样的<string, string> hashmap:

{
  "key1": "value1",
  "key2": "value2"
}

对应的 OpenAPI 2.0 定义为:

definitions:
  StringStringMap:
    type: object
    additionalProperties:
      type: string

在 OpenAPI 3.0 中,定义为:

components:
  schemas:
    StringStringMap:
      type: object
      additionalProperties:
        type: string


像这样的<string, object> hashmap

{
  "key1": {"someData": "data", "someOtherData": true},
  "key2": {"someData": "data2", "someOtherData": false}
}

将在 OpenAPI 2.0 中以这种方式定义:

definitions:
  ComplexObject:
    type: object
    properties:
      someData:
        type: string
      someOtherData:
        type: boolean

  StringObjectMap:
    type: object
    additionalProperties:
      $ref: "#/definitions/ComplexObject"

在 OpenAPI 3.0 中:

components:
  schemas:
    ComplexObject:
      type: object
      properties:
        someData:
          type: string
        someOtherData:
          type: boolean

    StringObjectMap:
      type: object
      additionalProperties:
        $ref: "#/definitions/ComplexObject"

我刚刚在 part 4 of my OpenAPI (fka Swagger tutorial) 中深入介绍了这一点。

OpenAPI (fka. Swagger) specification explains briefly this too

【讨论】:

  • 这很有帮助,并且在值的数据结构都是 ComplexObject 类型的情况下有效。但是,我有一个场景,值的结构根据键的模式而变化。在 JSON Schema 中,我可以使用 patternProperties 轻松表达这一点。关于如何在 OAS/Swagger 中表达这一点有什么想法吗?
  • 我正在使用 swagger 2.0。我想得到 >。我们怎样才能得到这种类型的响应?
  • 不错的提示!但是有一个棘手的问题,例如在此语法中定义的示例无法正确显示,看起来此属性只是从示例值中丢失。有什么线索可以解决这个问题吗?
  • @arnaud 我们可以有一个具有不同键的哈希图,即
  • 看起来不错,当$ref 用作值时,我仍然不明白如何将string 定义为键类型(当然是Open API 3)。你能解释一下吗?
【解决方案2】:

这对我有用。没有任何值类型限制

      definitions:
        dynamicFields:
          type: object
          additionalProperties: {}

示例:您可以在此处传递任何类型的值

{
   "dynamicFields" : {
      "accountNo": "aaaaaa3455",
      "customerNo": 123455,
      "isApplicable": true,
      "phoneNo": [
        "38859379384",
        3948399448,
        true
      ]
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多