Swagger codegen для Java Spring генерирует неправильный объект ответа файла из компонента OpenAPI двоичного формата - PullRequest
7 голосов
/ 12 февраля 2020

Я использую swagger-codegen-maven-plugin для генерации интерфейса Spring из файла OpenAPI (OpenAPI 3.0.2)

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

Ответом одного API покоя должен быть файл PDF

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 возвратил некоторый StreamResource или некоторое другое представление файла из потока / байтов в памяти. Возможно ли это через swagger-codegen-maven-plugin или какой-либо другой параметр?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2020

В итоге я переключился с

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

на

<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>4.2.3</version>
  ...
</plugin>

Этот плагин понял все правильно и генерирует Resource вместо ResponseEntity

1 голос
/ 18 февраля 2020

возможно, вы могли бы попробовать что-то вроде этого

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

, чем использовать усы и указать это в файле усов с расширениями поставщика

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

Я использую это для интерфейса API и, возможно, как-то вы мог бы использовать это и в вашем случае

1 голос
/ 18 февраля 2020

Попробуйте что-то вроде этого:

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