web-dev-qa-db-ja.com

Swagger送信本文とformDataパラメーター

Swagger 2.0を使用していますが、複数の投稿パラメーターを送信するのに問題があります。 SwaggerエラーOperation cannot have a body parameter and a formData parameterがあり、それを修正する方法がわかりません。私の定義ではbodyパラメーターがあり、このパラメーターにはJSON形式が必要ですが、側面にはアップロードするファイルやファイル名などの他のパラメーターがあります。

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

swagger仕様による seetype:bodyおよびtype:formDataは、同じ操作に対して一緒に存在することはできません。

10
aK26

問題を解決する1つの方法は、「ファイル」タイプのフォームパラメーターとして「データ」を設定することです。以下に例を示します。

  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

更新:本体パラメーターとフォームパラメーターは共存できません: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

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

8
William Cheng