Forum Discussion

as's avatar
as
New Contributor
5 years ago

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 requir...
  • HKosova's avatar
    5 years ago

    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