John Meyer
John Meyer

Reputation: 2356

How to define an example request body containing an array of complex objects in Swagger?

I am trying to write the Swagger spec for a service that posts an array of objects as request body. I would like the user to be able to test the service with a specific set of multiple different complex objects in the array as the default sample inputs.

So far I have the following code defining the service and complex object:

paths:
    /myService
        post:
            summary: test 123
            description: test 123
            parameters:
                - name: bodyParamsObject
                  description: 'Object containing any / all params in the body'
                  in: body
                  required: true
                  schema:
                    properties:
                        data:
                            $ref: '#/definitions/myInputArray'
            responses:
                200:
                    description: OK
                    schema: myOutputArray

definitions:
    myInputArray:
        type: array
        items:
            $ref: '#/definitions/myComplexObject'

    myOutputArray:
        type: array
        items:
            $ref: '#/definitions/myComplexObject'

    myComplexObject:
        type: object
        properties:
            description:
            type: string
            example: 'Example Item'     
        size:
            example: 552
            type: integer
            format: int32
        hasAdditionalProperties:
            type: boolean
            example: true

The output array is coming back correctly, but there is only one item in the model schema.

How can I make the sample request body contain multiple different items in the array?

Upvotes: 2

Views: 7514

Answers (2)

Taft Wallace
Taft Wallace

Reputation: 11

/**
 * @swagger
 * components: 
 *    schemas:
 *      JSBaseItem:
 *        type: object
 *        properties:
 *          name:
 *            type: string
 *            description:  The skill name for the job req
 *          weight: 
 *            type: integer
 *            description: The value assigned to the skill name 
 */

/**
 * @swagger
 * components: 
 *    schemas:
 *      JobSearchItem:
 *        type: object
 *        properties:
 *          skills:
 *            type: array
 *            description:  The skill name for the job req
 *            items:
 *               $ref: '#/components/schemas/JSBaseItem'
 *          position: 
 *            type: array
 *            description: The value assigned to the skill name 
 *            items:
 *               $ref: '#/components/schemas/JSBaseItem'
 * 
 */


 *      requestBody:
 *        required: true
 *        content: 
 *          application/json:
 *            schema: 
 *               type: object
 *               items:
 *                 $ref: '#/components/schemas/JobSearchItem'
 *            example: {"skills":[{"name":"skillname","weight": 0}],"position":[{"name":"positionname","weight": 0}]}

To get an example of my complex JSON message to appear as an example in my Swagger Documentation, I had to write the example message keeping on a single line.

Upvotes: 0

John Meyer
John Meyer

Reputation: 2356

I was able to solve this by using the example property on the object definition and filling it with the array in json.

definitions:
    myInputArray:
        type: array
        items:
            $ref: '#/definitions/myComplexObject'
        example: [
                    {
                        "description": "Example Item 1",
                        "hasAdditionalProperties": true,
                        "size": 750,
                    },
                    {
                        "description": "Another example",
                        "hasAdditionalProperties": false,
                        "size": -22,
                    },                                
                    {
                        "description": "Last one",
                        "hasAdditionalProperties": true,
                        "size": 0,
                    }
                ]

    myComplexObject:
        type: object
        properties:
            description:
            type: string
            example: 'Example Item'     
        size:
            example: 552
            type: integer
            format: int32
        hasAdditionalProperties:
            type: boolean
            example: true

Upvotes: 3

Related Questions