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

Spring Boot @RequestBody映射JSON时未传字段默认null的实现方法

问题说明

向Spring Boot接口foo()发起POST请求时,携带如下JSON格式请求体:

{
    "a": "hallo",
    "b": "world",
    "aa": 10
}

接口定义如下:

@PostMapping("/foo")
public void foo(@RequestBody MyClass myClass) {
    //执行相关业务逻辑
}

参数接收类定义:

class MyClass {
    String a;
    String b;
    String c;
    int aa;
}

默认情况下框架可自动完成JSON到对象的字段映射,但需要实现规则:仅对JSON中实际传递的字段赋值,MyClass里未接收到传参的其余字段统一初始化为null。

实现步骤
  • 第一步:将类中所有基本数据类型替换为对应包装类型
    Java的基本数据类型(int/long/boolean/char等)在JVM层面不支持null值,未赋值时会自动赋予类型默认值(比如int默认0,boolean默认false),这是语言特性,任何反序列化框架都无法突破。要让未传参字段为null,必须先把基本类型替换为对应的包装类型,修改后的MyClass如下:
    class MyClass {
        String a;
        String b;
        String c;
        // 原int类型替换为包装类Integer,支持null赋值
        Integer aa;
    }
    
  • 第二步:配置Jackson反序列化规则(全局生效)
    Spring Boot默认使用Jackson做JSON序列化/反序列化,只需要在配置文件中关闭缺失字段的默认值赋值逻辑即可,以application.yml为例:
    spring:
      jackson:
        deserialization:
          # 遇到JSON中存在、类中不存在的字段时不抛错,属于常规兼容配置
          fail-on-unknown-properties: false
        mapper:
          # 核心配置:JSON中缺失的字段不赋予默认值,保持对象初始化的null状态
          use-defaults-for-missing-properties: false
    
  • (可选)单类生效配置
    如果不需要全局修改规则,只需要对MyClass类生效,可以直接在类上添加Jackson注解,无需修改全局配置:
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    class MyClass {
        String a;
        String b;
        String c;
        Integer aa;
    }
    
效果验证

配置完成后传入示例请求体,最终生成的MyClass实例属性如下,完全符合需求:

  • a:赋值为传入的"hallo"
  • b:赋值为传入的"world"
  • aa:赋值为传入的10
  • c:未收到传参,值为null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:27:40