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

Spring Boot中Jackson反序列化时如何为null的Long属性设置默认值0

Jackson反序列化null值转默认值0的实现方案

以下几种实现方式都不需要手动遍历对象赋值,性能和原生反序列化几乎一致:

方案1:单个字段配置(最常用,灵活度最高)

Jackson 2.9及以上版本推荐使用,仅对carValue字段生效,不影响其他字段逻辑:

  1. 给carValue设置初始默认值0L
  2. 添加@JsonSetter注解,指定JSON值为null时不覆盖初始值
    修改后的Car类字段代码:
@JsonProperty(value = "car_value")
@JsonSetter(nulls = Nulls.SKIP)
private Long carValue = 0L;

如果项目中使用了Lombok的@Builder注解,需要额外添加@Builder.Default保证Builder模式也能识别默认值:

@Builder.Default
@JsonProperty(value = "car_value")
@JsonSetter(nulls = Nulls.SKIP)
private Long carValue = 0L;

方案2:全局类型配置(适合批量处理同类型字段)

如果所有Long类型的字段反序列化时遇到null都需要转为0,可以直接配置ObjectMapper全局规则,不需要修改实体类:
修改后的反序列化代码:

public List<Car> stringToCar(String json) throws JsonProcessingException {
    ObjectMapper om = new ObjectMapper();
    // 全局配置Long类型null值转为空(数值类型空值对应0)
    om.configOverride(Long.class)
      .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
    return om.readValue(json,  new TypeReference<List<Car>>() {} );
}

方案3:自定义反序列化器(兼容低版本Jackson)

如果使用的Jackson版本低于2.9,不支持@JsonSetter的nulls参数,可以自定义反序列化器实现:

  1. 编写Long类型默认值反序列化器
public class LongDefault0Deserializer extends StdDeserializer<Long> {
    public LongDefault0Deserializer() {
        super(Long.class);
    }

    @Override
    public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String value = p.getText();
        if (value == null || value.isBlank()) {
            return 0L;
        }
        try {
            return Long.parseLong(value.trim());
        } catch (NumberFormatException e) {
            return 0L;
        }
    }

    @Override
    public Long getNullValue(DeserializationContext ctxt) {
        return 0L;
    }
}
  1. 在实体类字段上绑定反序列化器
@JsonProperty(value = "car_value")
@JsonDeserialize(using = LongDefault0Deserializer.class)
private Long carValue;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:03