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.
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
]
}
}
Yes it's possible.
In OpenAPI (fka. Swagger) 2.0 and 3.0, a hashmap is always a <string, something>
map:
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.