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

如何在Jackson中用带上下文的重载方法反序列化JSON空值与Null值

解决Jackson自定义反序列化器处理Null/空值的非弃用方案

你提到的弃用方法对应的重载变体,是带DeserializationContext参数的getNullValue和getEmptyValue方法。Jackson 2.6+要求用这两个方法替代无参版本,用来处理null和空值的反序列化逻辑。

修改后的自定义反序列化器代码

package com.custom_app.client_app.web.business.dictionary.control.deserializer;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import io.vavr.control.Try;
import java.io.IOException;

public class CustomDeserializer extends StdDeserializer<String> {
    public CustomDeserializer() {
        super(String.class);
    }

    // 处理null值的非弃用方法
    @Override
    public String getNullValue(DeserializationContext ctxt) {
        return "FILL_FIELD";
    }

    // 处理空值(如空字符串"")的非弃用方法
    @Override
    public String getEmptyValue(DeserializationContext ctxt) {
        return "FILL_FIELD";
    }

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        // 此时输入已排除null和空字符串,只需验证格式
        return Try.of(p::getText)
                .filter(text -> text.matches("\\d{9}")) // 匹配9位数字
                .getOrElse("FILL_FIELD"); // 格式不合法时返回默认值
    }
}

关键说明

  • getNullValue(DeserializationContext ctxt):当Jackson反序列化遇到null值时,会自动调用此方法,直接返回你定义的默认值。
  • getEmptyValue(DeserializationContext ctxt):当输入是空字符串("")时,Jackson会调用此方法处理。
  • deserialize方法优化:由于null和空值已被上述两个方法处理,这里只需专注验证非空输入的格式是否符合9位数字要求,不符合则返回默认值。

这样修改后,就能覆盖null、空字符串、格式不合法这三种场景,全部返回"FILL_FIELD",同时完全使用非弃用的Jackson API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:01:10