2016-04-26 13 views
8

Ich benutze Swagger 2.0 und ich habe ein Problem, mehrere Post-Parameter zu senden. Ich habe einen prahlerischen Fehler Operation cannot have a body parameter and a formData parameter und ich kann nicht es beheben. In meiner Definition habe ich einen Body-Parameter und dieser Parameter benötigt ein JSON-Format, aber eine Seite Ich habe andere Parameter wie Dateien zum Hochladen und Dateinamen.Swagger senden Körper und FormData Parameter

Wie kann ich Körper und FormData Parameter beide senden? Hier

ist die 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 
+0

Mögliches Duplikat von [In Swagger, wie definiert man eine API, die eine Datei zusammen mit einem Schema-Parameter verwendet?] (Https://stackoverflow.com/questions/32725052/in-swagger-how-to-define-an -api-das-konsumiert-eine-Datei-zusammen mit-einem-Schema-Parameter) – Helen

+0

Meine Frage ist älter als dieser Beitrag ... – John

+0

Dieser ist tatsächlich älter (ab 2015). – Helen

Antwort

5

Eine Möglichkeit, das Problem zu lösen ist „Daten“ als Formular-Parameter mit dem Typ „Datei“ zu setzen. Hier ein Beispiel:

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: Körperparameter und Formparameter können nicht koexistieren: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

Body - Die Nutzlast, die auf die HTTP-Anforderung angefügt wird. Da es nur eine Nutzlast geben kann, kann es nur einen body-Parameter geben. Der Name des body-Parameters hat keine Auswirkung auf den Parameter selbst und wird nur für Dokumentationszwecke verwendet. Da auch Formularparameter in der Nutzlast enthalten sind, können Rumpf- und Formularparameter nicht zusammen für dieselbe Operation existieren.

+1

Es gibt keinen anderen Weg für den Typ 'Datei'? Weil ich keine Datei verwenden möchte, um die JSON-Daten zu überschreiten – John

+0

Danke !, aber was ist, wenn additionalMetadata ein Verweis auf eine Definition ist? – hmartos

+0

Können Sie ein Beispiel dafür angeben, wie der Body/Payload der HTTP-Anfrage aussieht (z. B. mit https://gist.github.com)? –

5

Nach der Prahlerei Spezifikationen see, type:body und type:formData kann nicht zusammen für den gleichen Betrieb vorhanden ist.

+1

Was ist mit Open API 3.0.0? https://swagger.io/docs/specification/describting-request-body/ Ist JSON mit Formdata jetzt möglich? – Gobliins