如何通过Swagger Code Generator为生成的POJO添加@JsonInclude(Include.ALWAYS)注解
Swagger Code Generator添加@JsonInclude注解问题解决方案
需求说明
需要在Swagger Code Generator生成的POJO类和字段级别添加@JsonInclude(Include.ALWAYS)注解,期望生成的POJO示例如下:
@JsonInclude(Include.ALWAYS) public class Pet { @JsonInclude(Include.ALWAYS) @JsonProperty("name") private String name = null; }
当前配置问题
你当前的Maven插件配置仅设置了类级别的注解,且未覆盖字段级别需求,导致无法生成符合预期的代码:
<plugin> <groupId>io.swagger.codegen.v3</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <configOptions> <additionalModelTypeAnnotations>@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.ALWAYS)</additionalModelTypeAnnotations> </configOptions> </plugin>
修复方案
1. 同时配置类和字段级别注解
添加additionalPropertyAnnotations配置项,实现字段级别注解的生成,完整配置如下:
<plugin> <groupId>io.swagger.codegen.v3</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <configOptions> <!-- 类级别注解 --> <additionalModelTypeAnnotations>@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.ALWAYS)</additionalModelTypeAnnotations> <!-- 字段级别注解 --> <additionalPropertyAnnotations>@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.ALWAYS)</additionalPropertyAnnotations> </configOptions> </configuration> </plugin>
2. 简化注解写法(可选)
如果希望生成的注解是短写形式@JsonInclude(Include.ALWAYS),可以通过importMappings配置自动导入Jackson相关类,避免全限定类名:
<plugin> <groupId>io.swagger.codegen.v3</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <!-- 自动导入注解相关类 --> <importMappings> <importMapping>JsonInclude=com.fasterxml.jackson.annotation.JsonInclude</importMapping> <importMapping>Include=com.fasterxml.jackson.annotation.JsonInclude.Include</importMapping> </importMappings> <configOptions> <additionalModelTypeAnnotations>@JsonInclude(Include.ALWAYS)</additionalModelTypeAnnotations> <additionalPropertyAnnotations>@JsonInclude(Include.ALWAYS)</additionalPropertyAnnotations> </configOptions> </configuration> </plugin>
验证
执行Maven代码生成命令:mvn swagger-codegen:generate,生成的POJO类会同时在类和字段级别添加目标注解,与预期示例一致。
内容的提问来源于stack exchange,提问作者P V REDDY
相关产品推荐
相关产品推荐

