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

如何在Jackson反序列化JSON时忽略null值?

解决Jackson反序列化后保留null值的问题

针对你遇到的反序列化后Student对象出现null字段的情况,提供以下几种实用解决方案:

方法一:给实体类添加注解,序列化时忽略null字段

如果你的核心需求是后续将对象转成JSON时不输出null字段,直接在Student类上添加@JsonInclude注解即可:

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Student {
    private String name;
    private String age;

    // 必须添加getter/setter方法,否则Jackson无法正常序列化/反序列化
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    // 重写toString,避免打印时显示null
    @Override
    public String toString() {
        return "{" + name + " - " + (age != null ? age : "") + "}";
    }
}

配置后,当你把students序列化为JSON时,缺失age字段的Alex不会输出age项;打印对象时也不会显示null。

方法二:全局配置ObjectMapper,统一忽略null字段

如果不想给每个实体类加注解,可以全局配置ObjectMapper,让所有序列化操作都忽略null字段:

File inRulesFile = (new ClassPathResource("Student.json")).getFile();
ObjectMapper mapper = new ObjectMapper();
// 全局设置序列化时跳过null字段
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
List<Student> students = Arrays.asList(mapper.readValue(inRulesFile, Student[].class));

// 示例:序列化students,输出结果不含null字段
String jsonResult = mapper.writeValueAsString(students);
// 输出内容:[{"name":"John","age":"18"},{"name":"Alex"}]

方法三:用Optional包装字段,避免直接出现null

如果希望Java对象本身就用“存在/不存在”的逻辑替代null,可以把字段类型改为Optional:

import java.util.Optional;

public class Student {
    private String name;
    private Optional<String> age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Optional<String> getAge() {
        return age;
    }

    public void setAge(Optional<String> age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "{" + name + " - " + age.orElse("") + "}";
    }
}

此时Jackson会自动将JSON中缺失的age字段映射为Optional.empty(),后续使用时可以通过age.isPresent()判断字段是否存在,彻底避免处理null值。

方法四:重写toString方法,打印时隐藏null

如果只是打印对象时不想看到null,直接重写Student的toString方法即可:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder("{").append(name);
    if (age != null) {
        sb.append(" - ").append(age);
    }
    sb.append("}");
    return sb.toString();
}

这样打印students的结果就是[{John - 18},{Alex}],不会显示null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:27:29