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

JSON反序列化场景下如何忽略DTO类的字段默认值

JSON反序列化忽略DTO字段默认值解决方案

默认Jackson反序列化时会优先调用DTO类的无参构造方法,此时字段声明的初始值会被预先赋值,如果输入JSON中没有对应字段,就会保留该初始值。要实现JSON缺失字段时自动覆盖为null,可采用以下两种简便方案:

方案1:全局配置(无代码侵入,推荐)

直接修改ObjectMapper配置,全局生效,不需要改动任何DTO类代码,适合所有DTO都需要遵循该规则的场景:

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.databind.ObjectMapper;

// 配置ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// 核心配置:JSON中缺失的字段统一赋值为null,覆盖类的默认初始值
objectMapper.setDefaultSetterInfo(JsonSetter.Value.forMissing(null));

如果是SpringBoot项目,可直接将配置后的ObjectMapper注册为Bean,全局接管序列化/反序列化逻辑:

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDefaultSetterInfo(JsonSetter.Value.forMissing(null));
        return objectMapper;
    }
}

方案2:单个类注解配置(局部生效)

如果只需要部分DTO遵循该规则,不想改动全局配置,可以配合Lombok注解实现,不需要手动编写全参构造器:

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

// 自动生成全参构造器并添加@JsonCreator注解
@AllArgsConstructor(onConstructor = @__(@JsonCreator))
@NoArgsConstructor
public class Dto {
    private String name = "test";
}

该配置下Jackson会优先使用带@JsonCreator的全参构造反序列化,JSON中缺失的字段会自动赋值为null,覆盖类的初始值。

注意:如果没有使用Lombok,也可以手动给DTO添加带@JsonCreator的全参构造,只是需要额外编写构造代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:27:03