2016-04-26 7 views
8

私はSwagger 2.0を使用していますが、複数の投稿パラメータを送信する際に問題があります。私は奇妙なエラーOperation cannot have a body parameter and a formData parameterを持っており、私はそれを修正する方法を知らない。私の定義ではbodyパラメータがあり、このパラメータにはJSON形式が必要ですが、アップロードするファイルやファイル名のような他のパラメータがあります。Swagger send bodyとformDataパラメータ

bodyとformDataの両方のパラメータを送信するにはどうすればよいですか?ここで

は、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 
+0

[Swaggerでは、スキーマパラメータとともにファイルを使用するAPIを定義する方法は?](https://stackoverflow.com/questions/32725052/in-swagger-how-to-define-anスキル・パラメーイングと一緒にファイルを使用する) – Helen

+0

私の質問はこのポストよりも古いです... – John

+0

実際に(2015年以降の)古いものです。 – Helen

答えて

5

一つの方法は、タイプ「ファイル」とフォームパラメータとして「件のデータ」を設定することです。ここでの例である:

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 

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

UPDATE:身体パラメータおよび形状パラメータが共存することができない。https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

ボディ - HTTPリクエストに追加のペイロードを。 1つのペイロードのみが存在することができるので、1つのボディパラメータしか存在できません。 bodyパラメーターの名前はパラメーター自体には影響しません。これは、文書化の目的でのみ使用されます。フォームパラメータもペイロードに存在するため、同じ操作でボディとフォームのパラメータを一緒に使用することはできません。

+1

'ファイル'タイプには他の方法はありませんか?ファイルをJSONデータの末尾に使用したくないので、 – John

+0

ありがとうございます!しかし、additionalMetadataが定義への参照の場合はどうなりますか? – hmartos

+0

HTTPリクエストの本文/ペイロードの形式(https://gist.github.comなど)の例を挙げることはできますか? –

5

闊歩仕様seeによれば、type:bodytype:formDataは、同じ操作のために一緒に存在することができません。

+1

Open API 3.0.0はどうですか? https://swagger.io/docs/specification/describing-request-body/ FormDataを使用したJSONの使用は可能ですか? – Gobliins

関連する問題