open-api-generator如何仅为特定类添加additionalModelTypeAnnotations注解
open-api-generator 定向为指定模型类添加自定义注解实现方案
该需求完全可实现。你当前使用的additionalModelTypeAnnotations是全局生效配置,设计目标就是给所有生成的模型类统一追加注解,原生不支持定向筛选类,要实现单类定向加注解,可按优先级选择以下方案:
方案1:使用Schema级扩展属性(优先推荐)
open-api-generator的Java代码生成器原生支持单Schema维度的注解配置,你只需要在OpenAPI规范文件(yaml/json格式)中,给需要加注解的对应模型Schema添加x-java-class-annotations扩展属性即可,注解只会加到指定类上,不会影响其他模型。
示例配置(OpenAPI 3.0写法):
components: schemas: # 这是你需要加自定义注解的目标类 TargetCustomModel: x-java-class-annotations: - "@com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = com.test.java.data.CustomDeserializer.class)" type: object properties: # 正常写该类的字段定义即可 # 其他普通模型类不需要加这个扩展,就不会带上自定义注解 NormalModel: type: object properties: id: type: integer
配置完成后正常执行生成逻辑即可,不需要修改你现有maven/gradle插件的其他全局配置,5.x及以上版本的open-api-generator均支持该扩展属性。
方案2:自定义代码生成模板
如果你不方便修改OpenAPI源文件,可以通过修改mustache生成模板实现定向逻辑:
- 从你使用的对应版本open-api-generator依赖中,提取Java模型类对应的模板文件(通常为
pojo.mustache) - 将模板复制到你项目的自定义模板目录下,在类定义上方增加判断逻辑,仅当类名匹配你的目标类时才输出自定义注解,核心逻辑示例:
{{#model}} package {{package}}; // 原有import逻辑保持不变 // 新增定向判断:类名匹配目标类时才输出自定义注解 {{#equalsIgnoreCase classname "TargetCustomModel"}} @com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = com.test.java.data.CustomDeserializer.class) {{/equalsIgnoreCase}} // 原有类注解、类定义、字段、方法的模板内容保持不变 public class {{classname}} { // 省略原有模板逻辑 } {{/model}}
- 在生成插件的配置中添加
templateDirectory参数,指向你存放自定义模板的目录,生成时就会使用你修改后的逻辑。
方案3:生成后源码修改
如果以上两种方案都不适用,可以在代码生成阶段完成后,通过构建插件(比如Maven/Gradle的javaparser插件、源码增强插件),匹配到你需要修改的目标类源码,定向插入对应的注解即可,该方案灵活性最高,但配置成本也相对更高。
注意:
- 使用方案1时,请先删除你现有配置中
additionalModelTypeAnnotations的全局注解配置,避免其他无关节点被统一加上注解;- 不要尝试通过
additionalModelTypeAnnotations的参数规则实现类过滤,该配置项没有提供类名匹配、筛选的相关能力,所有配置值都会无差别追加到所有生成的模型类上。
内容的提问来源于stack exchange,提问作者user3310115
相关产品推荐
相关产品推荐

