#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'