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

Spring中@RequestBody为何需要搭配@Getter注解?

Jackson反序列化时Getter的必要性真相

其实你可能搞混了——Jackson默认执行反序列化(也就是把JSON映射到Java对象的环节)时,完全不需要Getter方法。它确实依赖反射,但核心是直接操作类的私有字段,或者借助构造方法、Setter来完成赋值,Getter本身在默认的反序列化逻辑里没什么作用。

之所以会产生“需要Getter”的误解,通常是这几个场景导致的:

  • 序列化和反序列化的需求混淆
    很多人把序列化(Java对象转JSON)的要求套到了反序列化上。序列化时,Jackson默认会通过Getter读取字段值来生成JSON,但反序列化是反向操作,是把JSON的值写入对象字段,根本不需要Getter来“获取”什么。

  • 特殊配置或注解的影响
    如果项目里给Jackson做了自定义配置,比如开启了MapperFeature.USE_GETTERS_AS_SETTERS,这时候Jackson会把形如getXxx()的方法当作字段赋值的入口(非默认行为);另外如果用了@JsonGetter注解并配合特殊配置,才会让Getter参与反序列化,但这些都是人为配置的特殊情况,不是默认规则。

  • Lombok注解的误导
    很多项目用@Data注解自动生成Getter、Setter和无参构造。大家看到反序列化生效了,就误以为是Getter的功劳,但实际上是@Data包含的无参构造(Jackson默认需要无参构造来实例化对象,除非用@JsonCreator指定有参构造),或者Jackson能直接通过反射访问Lombok生成的私有字段,和Getter没关系。

举个最直接的例子,下面这个类没有任何Getter,一样能正常用@RequestBody接收JSON:

public class User {
    private String username;
    private int age;

    // 只需要无参构造(Jackson默认要求,除非自定义构造逻辑)
    public User() {}
}

当你发送{"username":"Alice","age":25}的请求时,Spring会通过Jackson把JSON完美映射到User对象里,全程不需要Getter参与。

总结一下:反序列化环节中,Getter不是必须的。你之所以有这个疑惑,大概率是把序列化的需求和反序列化搞混了,或者遇到了项目里自定义的Jackson配置场景。Jackson的核心反序列化逻辑,本质是通过反射直接操作字段,或者利用构造方法、Setter来完成赋值,Getter在默认流程里没起到映射的作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:43:14