web-dev-qa-db-ja.com

Swagger codegenをJava Springがバイナリ形式のOpenAPIコンポーネントから不正なファイル応答エンティティを生成する

Swagger-codegen-maven-pluginを使用してOpenAPIファイル(OpenAPI 3.0.2)からSpringインターフェースを生成しています

<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.14</version>

1つのREST APIの応答はPDF file

components:
    schemas:
        contractFile:
            type: string
            format: binary

生成されたJava RESTインターフェイスには次のメソッドが含まれます

default ResponseEntity<File> getContract(@ApiParam(value = "File to download",required=true) @PathVariable("uid") String uid) {
...
}

ファイルクラスはファイルシステムへのパスを表しますが、ファイルシステムにはファイルがありません。Javaメモリのバイト数であり、ファイルとしてディスクに保存したくありません。

GetContractがメモリ内のストリーム/バイトからストリームリソースまたはファイルの他の表現を返すようにしたい。これはswagger-codegen-maven-pluginまたは他のオプションを介して可能ですか?

7
Matúš Bartko

多分あなたはこのようなものを試すことができます

/myendpoint:
    get:
      tags: [myendpint]
      summary: my cool endpoint
      operationId: getStuff
      x-custom-return-type: 'Java.something.stream.Stream'

moustacheを使用し、ベンダー拡張付きのmoustacheファイルで指定するより

ResponseEntity<{{#responseWrapper}}{{
    .}}<{{/responseWrapper}}{{>returnTypes}}{{#vendorExtensions.x-custom-return-type}}

私はそれをインターフェースAPIに使用し、おそらくあなたのケースでもそれを使用できます

1
hocikto

次のようなものを試してください:

responses:
     '200':
          description: A PDF file
          content:
            application/pdf:
              schema:
                type: string
                format: binary
1
starman1979