You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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&lt;Part&gt;</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:自定义控制器模板

如果以上方案不生效,可以直接修改生成器的控制器模板:

  1. 从openapi-generator的官方资源中获取WebFlux对应的controller.mustache模板文件
  2. 复制到项目的src/main/resources/openapi-templates目录下
  3. 找到模板中处理multipart数组参数的代码段,将List<Flux<Part>>替换为Flux<Part>:
    {{#isMultipart}}
        {{#isArray}}
            @Parameter(name = "{{paramName}}") @RequestPart(value = "{{paramName}}") Flux&lt;Part&gt; {{paramName}},
        {{/isArray}}
    {{/isMultipart}}
    
  4. 在Maven插件配置中指定自定义模板路径:
    <configuration>
        <!-- 其他配置 -->
        <templateDirectory>${project.basedir}/src/main/resources/openapi-templates</templateDirectory>
    </configuration>
    

内容的提问来源于stack exchange,提问作者Juan Andres Moreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:45:14