Swagger HashMap property type

后端 未结 2 1971
渐次进展
渐次进展 2020-11-30 10:18

Is there any way to define a HashMap or Generic Object type in the models section? I have a REST service that returns products and those products can have different options.

相关标签:
2条回答
  • 2020-11-30 10:24

    This works for me. without any value type restriction

          definitions:
            dynamicFields:
              type: object
              additionalProperties: {}
    

    Example : you can pass any type of value here

    {
       "dynamicFields" : {
          "accountNo": "aaaaaa3455",
          "customerNo": 123455,
          "isApplicable": true,
          "phoneNo": [
            "38859379384",
            3948399448,
            true
          ]
        }
    }
    
    0 讨论(0)
  • 2020-11-30 10:29

    Yes it's possible.

    In OpenAPI (fka. Swagger) 2.0 and 3.0, a hashmap is always a <string, something> map:

    • The key is always a string and do not need to be defined.
    • The value type is what you want and is defined with additionalProperties.

    Let's say you want to describe a <string, string> hashmap like this one:

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

    The corresponding OpenAPI 2.0 definition will be:

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

    In OpenAPI 3.0 the definition will be:

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


    A <string, object> hashmap like this

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

    will be defined this way in OpenAPI 2.0:

    definitions:
      ComplexObject:
        type: object
        properties:
          someData:
            type: string
          someOtherData:
            type: boolean
    
      StringObjectMap:
        type: object
        additionalProperties:
          $ref: "#/definitions/ComplexObject"
    

    and in OpenAPI 3.0:

    components:
      schemas:
        ComplexObject:
          type: object
          properties:
            someData:
              type: string
            someOtherData:
              type: boolean
    
        StringObjectMap:
          type: object
          additionalProperties:
            $ref: "#/definitions/ComplexObject"
    

    I've just covered this in depth in part 4 of my OpenAPI (fka Swagger tutorial).

    The OpenAPI (fka. Swagger) specification explains briefly this too.

    0 讨论(0)
提交回复
热议问题