as
5 years agoNew Contributor
Swagger Response Body require object if property equals a value OpenApi Spec 3
Let's say we have a simple response
{ "check_completed": true, "check_details": { "check_number": 123123. "check_mechanic": "Joe Blogs" } }
CheckResponse: type: object required: - check_completed properties: check_completed: type: boolean check_details: $ref: '#/components/schemas/checkdetails'
Is it possible to mark the check_details as required if check_completed is true?
It's possible but cumbersome. You need to use anyOf, like this:
CheckResponse: type: object required: - check_completed properties: check_completed: type: boolean check_details: $ref: '#/components/schemas/checkdetails' anyOf: - properties: check_completed: enum: [false] - properties: check_completed: enum: [true] required: - check_details
I would recommend describing this dependency in the schema/property descriptions instead.
OpenAPI 3.1 (future version) will make this easier thanks to using the latest JSON Schema which includes if...then..else among other things.
CheckResponse:: type: object required: - check_completed properties: check_completed: type: boolean check_details: $ref: '#/components/schemas/checkdetails' if: properties: check_completed: const: true then: required: - check_details