Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swagger send body and formData parameter [duplicate]

I'm using Swagger 2.0 and I have a problem to send multiple post parameters. I have a swagger error Operation cannot have a body parameter and a formData parameter and I don't know how to fix it. In my definition I have a body parameter and this parameter need a JSON format but a side I have other parameter like files to upload and filename.

How can I do to send body and formData parameters both ?

Here is the web service definition :

  /updateDatas:
    post:
      summary: Upadate datas
      description: |
        Update datas
      consumes:
        - multipart/form-data
      produces:
          - application/json
      parameters:
        - name: firstFileName
          in: formData
          description: First file name.
          required: true
          type: string
        - name: secondFileName
          in: formData
          description: Second file name.
          required: true
          type: string
        - name: datas
          in: body
          description: Json object informations.
          required: true
          schema:
            $ref: '#/definitions/Datas'
        - name: firstFile
          in: formData
          description: First file .jpg
          required: true
          type: file
        - name: clientFile
          in: formData
          description: Second file .jpg
          required: true
          type: file
      tags:
        - Application
      responses:
        '200':
          description: Uploaded
          schema:
            $ref: '#/definitions/Upload'
        '401':
          description: Unauthorized Bad Token
like image 504
John Avatar asked Apr 26 '16 10:04

John


People also ask

How do you pass multiple parameters in swagger?

If you are trying to send a body with multiple parameters, add an object model in the definitions section and refer it in your body parameter, see below (works with editor.swagger.io):

How do you pass the optional parameter in swagger?

By default, Swagger treats all request parameters as optional. You can add required: true to mark a parameter as required. Note that path parameters must have required: true , because they are always required. description: Numeric ID of the user to get.


2 Answers

According to the swagger specifications see, type:body and type:formData cannot exist together for the same operation.

like image 111
aK26 Avatar answered Sep 23 '22 18:09

aK26


One way to resolve the problem is to set "datas" as form parameter with the type "file". Here is an example:

  parameters:
    - name: petId
      in: path
      description: ID of pet to update
      required: true
      type: integer
      format: int64
    - name: additionalMetadata
      in: formData
      description: Additional data to pass to server
      required: false
      type: string
    - name: file
      in: formData
      description: file to upload
      required: false
      type: file

Ref: https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml#L257

UPDATE: body parameters and form parameters cannot co-exist: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be one body parameter. The name of the body parameter has no effect on the parameter itself and is used for documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist together for the same operation.

like image 28
William Cheng Avatar answered Sep 25 '22 18:09

William Cheng