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

为什么使用Spring RestTemplate获取对象时Lombok注解不生效?

问题成因

  1. Lombok编译期处理未生效:Lombok属于编译期注解处理器,生成样板代码需要两个必备条件:一是项目构建配置中正确引入Lombok依赖与注解处理器配置,二是IDE开启了注解处理功能且安装了对应Lombok插件。缺少任意一项时,@NoArgsConstructor、@Getter、@Setter标注不会实际生成对应方法,编译后的class文件仍只有你手动编写的全参构造,因此Jackson反序列化时会提示找不到无参构造。
  2. 手动补充无参构造后仍无有效Setter:你手动添加无参构造解决了实例化问题,但因为Lombok仍未生效,没有自动生成Setter方法,Jackson默认通过Setter给字段赋值,找不到对应Setter就无法完成字段注入,最终得到的对象所有字段均为空。
  3. 手写全量方法时所有逻辑都符合Jackson反序列化要求,因此功能正常。

修复方案

1. 完善项目Lombok配置

根据你使用的构建工具添加对应配置:

  • Maven(pom.xml):
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
<!-- 若使用Spring Boot父工程管理版本则无需指定版本号,否则请添加对应稳定版版本号 -->
  • Gradle(build.gradle):
dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

2. 开启IDE注解处理

  • IntelliJ IDEA:依次进入File → Settings → Build, Execution, Deployment → Compiler → Annotation Processors,勾选Enable annotation processing后保存设置,重启IDE生效。
  • Eclipse:下载对应版本Lombok插件安装后重启IDE即可自动生效。

3. 简化DTO类注解

你可以直接使用@Data注解整合@Getter、@Setter、@ToString、@EqualsAndHashCode等常用注解,同时用@AllArgsConstructor替换手动编写的全参构造,进一步减少样板代码:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class NotaryDistrict {
    String idDistrict;
    String denominazione;
    String regione;
    String provincia;
    ArrayList<Localita> localita;
}

4. 验证生效

编译项目后,查看编译生成的NotaryDistrict.class文件,确认存在无参构造、全参构造以及所有字段对应的get/set方法,即说明Lombok配置正常,此时重新运行项目即可正常完成反序列化。

如果完成上述操作后仍有异常,可检查Lombok版本是否与当前Spring Boot版本兼容,升级到Lombok最新稳定版即可解决兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:54:04