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

如何配置Jackson控制Null字段行为?实现空字符串映射需求

解决Jackson String类型隐式/显式Null值转空字符串问题

一、自定义序列化器与反序列化器

针对String类型单独处理,不管是序列化还是反序列化,都把Null(显式或隐式)转为空字符串""。

1. 自定义String反序列化器

处理JSON中显式的null值,配合后续配置处理隐式Null(JSON未传入的字段):

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

    @Override
    public String deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        String value = parser.getValueAsString();
        return value == null ? "" : value;
    }
}

2. 自定义String序列化器

把POJO中null的String字段序列化为"":

public class EmptyStringSerializer extends StdSerializer<String> {
    public EmptyStringSerializer() {
        super(String.class);
    }

    @Override
    public void serialize(String value, JsonGenerator generator, SerializerProvider provider) throws IOException {
        generator.writeString(value == null ? "" : value);
    }
}

二、全局配置(推荐)

将自定义序列化器/反序列化器注册到ObjectMapper,全局生效无需修改每个POJO:

ObjectMapper objectMapper = new ObjectMapper();

// 注册String类型的序列化器和反序列化器
SimpleModule module = new SimpleModule();
module.addSerializer(String.class, new EmptyStringSerializer());
module.addDeserializer(String.class, new EmptyStringDeserializer());
objectMapper.registerModule(module);

// 序列化配置:确保所有字段都被序列化(包括原本为null的字段)
objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);

// 反序列化配置:允许JSON中缺少POJO字段,避免报错
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

三、局部配置(单POJO或字段)

如果不想全局生效,可在POJO字段上直接添加注解:

public class RequestBody {
    @JsonSerialize(using = EmptyStringSerializer.class)
    @JsonDeserialize(using = EmptyStringDeserializer.class)
    String firstName = ""; // 初始化空字符串处理隐式Null

    @JsonSerialize(using = EmptyStringSerializer.class)
    @JsonDeserialize(using = EmptyStringDeserializer.class)
    String middleName = "";

    @JsonSerialize(using = EmptyStringSerializer.class)
    @JsonDeserialize(using = EmptyStringDeserializer.class)
    String lastName = "";

    // 构造器、getter/setter省略
}

四、关键说明

  • 隐式Null处理:JSON中未传入的字段,POJO字段默认是null,通过**字段初始化赋值""**即可转为空字符串;
  • 显式Null处理:自定义序列化器/反序列化器会直接把JSON中的null或POJO中的null转为"";
  • JsonInclude.Include.ALWAYS的作用是让序列化时不忽略null字段,确保自定义序列化器能将null转为""输出。

内容的提问来源于stack exchange,提问作者Ruturaj Dilip Mestry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:11:32