Плагин Open API Maven: как сгенерировать код для загрузки файлов

#java #feign #openapi-generator

#java #симулировать #openapi-генератор

Вопрос:

Я не могу сгенерировать сгенерированный открытым API клиент Feign для загрузки файлов.

Это фрагмент компонента open api requestBodies, который я пытаюсь использовать для загрузки массива файлов

 requestBodies:
    FilesRequestBody:
      description: Array of files
      content:
        multipart/form-data:
          schema:
            type: object
            properties:
              files:
                type: array
                items:
                  type: file
  

мой pom-файл содержит следующие настройки плагина

                 <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>4.2.3</version>
                <executions>
                    <execution>
                        <id>generate-feign-client</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.build.directory}/contract/api.yaml</inputSpec>
                            <language>java</language>
                            <output>${project.build.directory}/generated-sources</output>
                            <library>feign</library>
                            <typeMappings>
                                <mapping>file=File</mapping>
                            </typeMappings>
                        </configuration>
                    </execution>
  

обратите внимание на конфигурацию typeMappings, которая не работает.

В идеале я хотел бы сгенерированный клиент Feign, который выглядит примерно так..

 import feign.Param;
import feign.RequestLine;

import java.io.File;

public interface ImagesApi {

    @RequestLine("POST /api/images")
    @Headers({
            "Content-Type: multipart/form-data",
            "Accept: application/json"
    })
    List<Image> uploadImages(@Param("config") List<File> files);

}
  

Однако это генерируется, что, очевидно, не компилируется

     @RequestLine("POST /api/images")
    @Headers({
        "Content-Type: multipart/form-data",
        "Accept: application/json",
    })
    List<Image> uploadImages(UNKNOWN_BASE_TYPE UNKNOWN_BASE_TYPE);
  

есть идеи, как я могу заставить плагин maven использовать тип Java, например java.io .Файл?

Ответ №1:

Проблема была исправлена в выпуске OpenAPI Generator версии 6.0.0: https://github.com/OpenAPITools/openapi-generator/releases/tag/v6.0.0 . Пожалуйста, попробуйте.

Ответ №2:

Похоже, что в генераторе openapi есть ошибка. Он не может обрабатывать

      $ref '#/components/requestBodies/FilesRequestBody'
  

Поэтому, чтобы заставить его работать, не используйте ссылку на компоненты.. встроить тело запроса

   /api/images:
    post:
      tags:
        - image
      summary: uploadImage
      operationId: uploadImage
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file_list:
                  type: array
                  items:
                    type: string
                    format: binary
      responses:
        "201":
          $ref: '#/components/responses/ImagesResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  

Комментарии:

1. github.com/OpenAPITools/openapi-generator/issues/7922