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

Swagger Gen 2.2如何避免重复生成相同Java类实现跨包复用

问题场景

假设存在如下YAML定义文件:

  • Article.yml
GenericArticleDto:
  type: object
  properties:
    description: 
      type: string
[...]
  • Order.yml
EnglishArticleDto:
  type: object
  allOf:
    - $ref: '../Article.yml/components/schemas/GenericArticleDto'
[...]

首次使用swagger gen基于Order.yml生成Java类,指定目标生成包为com.test.order,生成完成后该包下包含EnglishArticleDto.java、GenericArticleDto.java两个类文件。

后续存在另一份同样引用GenericArticleDto对象的YAML文件Proposal.yml:

  • Proposal.yml
CustomerArticleDto:
  type: object
  allOf:
    - $ref: '../Article.yml/components/schemas/GenericArticleDto'

若再次使用swagger gen基于Proposal.yml生成Java类,指定目标生成包为com.test.proposal,执行生成脚本后该包下会生成CustomerArticleDto.java、GenericArticleDto.java两个类文件,产生重复的GenericArticleDto类定义。

咨询问题

当前使用的swagger gen版本为2.2,是否支持通过相关配置,避免重复生成GenericArticleDto类,直接复用com.test.order包下已存在的GenericArticleDto类?

解答

Swagger Codegen 2.2原生支持该能力,通过importMappings配置即可实现复用已有类、避免重复生成,不需要修改原有YAML文件的引用规则。

配置逻辑为:将需要复用的模型名称和目标已有类的全限定名做显式映射,生成器识别到映射规则后,遇到对应模型的$ref引用时,不会重新生成类文件,只会在生成的代码中直接导入指定路径下的已有类。

针对本场景,生成Proposal.yml对应代码时添加如下映射规则即可:GenericArticleDto=com.test.order.GenericArticleDto

不同执行方式的配置写法:

  • Maven插件方式:在插件configuration节点下添加importMappings配置
<configuration>
    <inputSpec>src/main/resources/Proposal.yml</inputSpec>
    <apiPackage>com.test.proposal.api</apiPackage>
    <modelPackage>com.test.proposal.model</modelPackage>
    <importMappings>
        <importMapping>GenericArticleDto=com.test.order.GenericArticleDto</importMapping>
    </importMappings>
</configuration>
  • CLI命令行方式:执行生成命令时追加--import-mappings参数,参数值按模型名=全限定类名格式填写,多个映射用逗号分隔。

如果后续有更多跨模块复用的公共模型,统一将对应映射规则加到importMappings配置中即可。

注意:该配置仅做引用映射,不会校验目标类是否真实存在,需要保证配置的全限定类名和实际已有类路径一致,避免出现编译报错。


内容的提问来源于stack exchange,提问作者davide.ferrari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:42:14