Search code examples
polymorphismopenapi

Override a property default value when referencing an existing schema


I'm trying to define query parameters that reference an existing schema but override it's default value, but this override seems to be ignored. Is it possible to do this?

For example, I have a reusable schema defined as

PageNumber:
    type: integer
    example: 10

I have various endpoints that reference this schema as query parameters, however they each have their own default value; some endpoints default to 10, others default to 20, etc.

/example/1:
    get:
      parameters:
        - name: pageNumber
          in: query
          schema:
            $ref: '#/components/schemas/PageNumber'
            default: 10
      responses:
        ...
/example/2:
    get:
      parameters:
        - name: pageNumber
          in: query
          schema:
            $ref: '#/components/schemas/PageNumber'
            default: 20
      responses:
        ...

The problem is that the default value seems to be ignored when a parameters schema references an existing schema. enter image description here

However if I update the parameters no not reference the existing schema and instead define the schema inline, the default value is used:

/example/1:
  get:
    parameters:
      - name: pageNumber
        in: query
        schema:
          type: number
          default: 10

enter image description here

Is it possible to override and apply this default value?


Solution

  • Try using allOf

    paths:
      /example-1:
        get:
          tags:
            - stack
          summary:
          description:
          operationId:
          parameters:
            - name: pageNumber
              in: query
              schema: 
                allOf: 
                  - $ref: "#/components/schemas/PageNumber"
                  - default: 20
          responses:
            '200':
              description: OK
              content:
                application/json:
                  schema:
                    type: object
    components:
      schemas:
        PageNumber:
          type: number
          example: 10
          default: 10
    
    

    You can see the example still resolves from the component schema but the default value is overridden

    example with allOf to override property