OpenAPI Generator生成List<Flux<Part>>而非Flux<Part>问题咨询
解决OpenAPI Generator生成WebFlux控制器参数类型不符问题
针对你遇到的List<Flux<Part>>生成不符合预期、需要改为Flux<Part>的需求,提供以下几种可行方案:
方案1:调整OpenAPI规范的编码配置
在multipart/form-data的content下添加encoding配置,明确指定文件数组的解析方式:
requestBody: required: true content: multipart/form-data: schema: type: object properties: files: type: array items: type: string format: binary encoding: files: style: form explode: false
explode: false会告诉生成器将数组作为单个请求部分处理,而非拆分成多个独立项,从而避免生成嵌套的List结构。
方案2:配置插件的类型映射
在Maven插件的配置中添加typeMappings和importMappings,强制将二进制数组类型映射为Flux<Part>:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.2.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <!-- 基础配置:指定生成器和库 --> <generatorName>spring</generatorName> <library>webflux</library> <!-- 类型映射:将二进制数组映射为Flux<Part> --> <typeMappings> <typeMapping>array[string,binary]=Flux<Part></typeMapping> </typeMappings> <!-- 导入映射:确保正确引入依赖类 --> <importMappings> <importMapping>Flux=reactor.core.publisher.Flux</importMapping> <importMapping>Part=org.springframework.http.codec.multipart.Part</importMapping> </importMappings> <!-- 其他配置:如spec路径、生成目录等 --> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <output>${project.build.directory}/generated-sources/openapi</output> </configuration> </execution> </executions> </plugin>
方案3:自定义控制器模板
如果以上方案不生效,可以直接修改生成器的控制器模板:
- 从openapi-generator的官方资源中获取WebFlux对应的
controller.mustache模板文件 - 复制到项目的
src/main/resources/openapi-templates目录下 - 找到模板中处理multipart数组参数的代码段,将
List<Flux<Part>>替换为Flux<Part>:{{#isMultipart}} {{#isArray}} @Parameter(name = "{{paramName}}") @RequestPart(value = "{{paramName}}") Flux<Part> {{paramName}}, {{/isArray}} {{/isMultipart}} - 在Maven插件配置中指定自定义模板路径:
<configuration> <!-- 其他配置 --> <templateDirectory>${project.basedir}/src/main/resources/openapi-templates</templateDirectory> </configuration>
内容的提问来源于stack exchange,提问作者Juan Andres Moreno
相关产品推荐
相关产品推荐

