Swagger HashMap property type

后端 未结 2 1973
渐次进展
渐次进展 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:29

    Yes it's possible.

    In OpenAPI (fka. Swagger) 2.0 and 3.0, a hashmap is always a 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 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 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.

提交回复
热议问题