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

使用openapi-generator-cli生成multipart/form-data类型Angular接口失败求助

解决OpenAPI Generator生成Angular服务时multipart/form-data数组字节类型的警告问题

问题场景

使用openapi-generator-cli生成Angular服务时,遇到以下异常:

  • OpenAPI规范核心片段(multipart/form-data请求体):
requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          test:
            type: array
            items:
              type: string
              format: byte
  • 生成过程中触发警告:
[main] WARN  o.o.codegen.DefaultCodegen - Could not compute datatypeWithEnum from string, null 
  • 关键现象:当对象属性为包含字节数组的数组时生成失败;若直接将单个字节数组作为对象属性则可正常生成。此前使用application/json类型时无问题,但需求强制要求改用multipart/form-data。
  • 执行的生成命令(npm脚本):
openapi-generator-cli generate -i ../../../../openapi/openapi.yaml -g typescript-angular -o src/generated-sources/openapi --additional-properties=supportsES6=true,npmVersion=6.9.0,ngVersion=14

已尝试但无效的方案:

  • 将format替换为binary或base64
  • 测试openapi-generator 5.1.1、6.4.0版本
  • 开启详细日志未获取额外报错信息
  • 简化数据结构至最小复现示例
  • 查阅并尝试Stack Overflow相关解决方案

解决方案

方法1:明确数组的集合格式

调整OpenAPI规范,为数组添加collectionFormat: multi,适配multipart/form-data的多字段提交逻辑:

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          test:
            type: array
            items:
              type: string
              format: binary
            collectionFormat: multi

该配置会让生成的代码正确识别数组中的每个字节项,对应multipart/form-data中多个同名字段的提交方式。

方法2:自定义Codegen模板

如果方法1无效,可修改typescript-angular的模板来适配数组字节类型:

  1. 通过openapi-generator-cli config-help -g typescript-angular查看模板默认路径
  2. 复制模板文件到自定义目录,修改api.mustache或model.mustache中数组类型的处理逻辑,针对format: byte的数组项强制生成Array<Blob>或Array<string>类型
  3. 生成时指定自定义模板路径:
openapi-generator-cli generate -i ../../../../openapi/openapi.yaml -g typescript-angular -o src/generated-sources/openapi --additional-properties=supportsES6=true,npmVersion=6.9.0,ngVersion=14 --template-dir ./custom-templates

方法3:升级OpenAPI Generator版本

尝试使用7.x版本的工具,新版本可能修复了multipart数组字节类型的处理bug:

npm install @openapitools/openapi-generator-cli@7.0.0 -D

重新执行生成命令即可。

方法4:临时应急方案

如果上述方法无法快速落地,可临时将数组拆分为多个单个字节属性:

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          test1:
            type: string
            format: byte
          test2:
            type: string
            format: byte

这种方式可正常生成代码,后续通过业务逻辑将多个属性合并为数组即可。

内容的提问来源于stack exchange,提问作者PaulD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:32:55