Search code examples
swagger-uiswagger-2.0swagger-editor

Can a swagger object passed as a parameter have default values in swagger-ui?


I define a path that takes MyObject as a parameter. MyObject has properties for cats and dogs. These have default values. In swagger-editor, the example doesn't show the default values, but try-it-out does create a MyObject with correct defaults.

In swagger-ui, I can see the defaults under Models, but not in the API. Is there a way to set these defaults ? swagger: '2.0' info: title: pass object with default properties as a parameter description: etc version: "Draft 0.1.1" host: example.com basePath: / produces: - application/json

paths:
  /myobject:

     post:
      summary: |
        post an object.
      parameters:
        - name: myObject
          in: body
          required: true
          schema:
            type: array
            items:
              $ref: '#/definitions/MyObject'
      responses:
        200:
          description: OK

definitions:

  MyObject:  # move to/models/model.yml
      type: object
      description: Contains default properties
      required:
        - cats
        - dogs
      properties:
        cats:
          type: number
          default: 9
        dogs:
          type: string
          default: "fido"

swagger-editor api

swagger-ui API (try it out)

swagger-ui Models shows the default values


Solution

  • Your usage of default is wrong. You probably want example instead.

    default is only used with optional fields and is handled on the server side. That is, if the client does not supply a value in the payload, the server will use the default value.

    Consider this User model:

    definitions:
      User:
        type: object
        required:
          - username
        properties:
          username:
            type: string
          role:
            type: string
            enum:
              - user
              - poweruser
              - admin
            default: user
    

    The role property is optional and defaults to user. So, if the client sends the payload without role:

    {
      "username": "bob"
    }
    

    the server will assume role=user.


    In your case, it looks like you want to provide example values for the fields. This is what the example keyword is for:

    definitions:
      MyObject:
        type: object
        description: Contains default properties
        required:
          - cats
          - dogs
        properties:
          cats:
            type: number
            example: 9      # <---
          dogs:
            type: string
            example: fido   # <---