web-dev-qa-db-fra.com

Swagger envoyer le corps et le paramètre formData

J'utilise Swagger 2.0 et j'ai un problème pour envoyer plusieurs paramètres de publication. J'ai une erreur de fanfaronnade Operation cannot have a body parameter and a formData parameter et je ne sais pas comment y remédier. Dans ma définition, j'ai un paramètre body et ce paramètre a besoin d'un format JSON mais d'un côté j'ai d'autres paramètres comme les fichiers à télécharger et le nom de fichier.

Comment puis-je envoyer les paramètres body et formData à la fois?

Voici la définition du service Web:

  /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
16
John

Selon les spécifications swagger voir , type:body et type:formData ne peut pas coexister pour la même opération.

10
aK26

Une façon de résoudre le problème consiste à définir "données" comme paramètre de formulaire avec le type "fichier". Voici un exemple:

  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

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

MISE À JOUR: les paramètres de corps et les paramètres de formulaire ne peuvent pas coexister: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

Body - Charge utile ajoutée à la demande HTTP. Puisqu'il ne peut y avoir qu'une seule charge utile, il ne peut y avoir qu'un seul paramètre de corps. Le nom du paramètre body n'a aucun effet sur le paramètre lui-même et est utilisé uniquement à des fins de documentation. Puisque les paramètres de formulaire sont également dans la charge utile, les paramètres de corps et de formulaire ne peuvent pas exister ensemble pour la même opération.

8
William Cheng