20

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

4

2 回答 2

35

是的,这是可能的。

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

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

假设您想描述一个<string, string>像这样的哈希图:

{
  "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>哈希图

{
  "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"

我刚刚在我的 OpenAPI(fka Swagger 教程)的第 4 部分中深入介绍了这一点。

OpenAPI (fka. Swagger) 规范也简要说明了这一点

于 2016-04-19T07:30:14.277 回答
0

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

      definitions:
        dynamicFields:
          type: object
          additionalProperties: {}

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

{
   "dynamicFields" : {
      "accountNo": "aaaaaa3455",
      "customerNo": 123455,
      "isApplicable": true,
      "phoneNo": [
        "38859379384",
        3948399448,
        true
      ]
    }
}
于 2020-02-12T09:34:05.670 回答