IntelliJ中Lombok构建POJO时@JsonProperty注解不生效问题求助
Lombok @Builder构建对象时@JsonProperty注解不生效问题排查
修复方案按优先级逐一验证:
- 补充Lombok全局配置,开启注解拷贝
默认配置下Lombok生成的Builder内部类不会自动复制字段上的Jackson注解,部分Jackson版本序列化时会读取Builder类的属性元数据,读不到@JsonProperty配置就会使用原生字段名。
在项目根目录(与pom.xml/build.gradle同级)新建lombok.config文件,写入以下配置:
配置添加完成后执行Rebuild Project,触发生成代码更新。lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty config.stopBubbling = true - 修正带默认值的final字段写法
你代码中grantType字段用final修饰且直接赋值了初始值,@Builder默认不会为这类字段生成构建逻辑,也会导致注解关联失效。如果需要该字段支持Builder赋值,去掉final修饰符,同时添加@Builder.Default注解显式声明默认值:@JsonProperty("grant_type") @Builder.Default private String grantType = "xyz"; - 检查IntelliJ注解处理器配置
确认IDE的注解处理功能开启:- 打开
Settings > Build, Execution, Deployment > Compiler > Annotation Processors - 勾选Enable annotation processing选项
- 确认Lombok插件已安装启用,重启IDE后重新构建项目
- 打开
- 验证序列化配置无覆盖
检查项目中ObjectMapper的全局配置,确认没有开启强制命名策略(比如PropertyNamingStrategies.LOWER_CAMEL_CASE)、也没有开启MapperFeature.USE_STD_BEAN_NAMING这类会覆盖字段注解的配置。可以用以下最小用例验证修复效果:public class Test { public static void main(String[] args) throws JsonProcessingException { pojo testObj = pojo.builder().clientId("test_client").build(); // 正确序列化结果:{"grant_type":"xyz","client_id":"test_client"} System.out.println(new ObjectMapper().writeValueAsString(testObj)); } }
注:当前类名
pojo为小写,不符合Java大驼峰类名命名规范,虽然不影响功能运行,建议调整为大驼峰格式。
内容的提问来源于stack exchange,提问作者ghostRider
相关产品推荐
相关产品推荐

