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

如何让Jackson序列化时将NULL日期字段输出为空字符串而非忽略

解决方案:Jackson序列化时保留null的Date字段并转为空字符串

针对userIndDate(java.util.Date类型)为null时不显示在响应中的问题,提供以下几种可行方案:

方案1:字段级注解+自定义序列化器

在SearchResponse实体类的userIndDate字段上添加注解,强制序列化null字段并自定义空值输出:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.Date;

public class SearchResponse {
    // 其他字段...
    
    @JsonInclude(JsonInclude.Include.ALWAYS) // 强制序列化null值字段
    @JsonSerialize(using = NullDateToStringSerializer.class) // 自定义序列化逻辑
    private Date userIndDate;
    
    // getter、setter、builder代码...
}

实现自定义序列化器,处理null值为空字符串,非null值按指定格式序列化:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class NullDateToStringSerializer extends JsonSerializer<Date> {
    // 可根据需求调整日期格式
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (date == null) {
            jsonGenerator.writeString("");
        } else {
            jsonGenerator.writeString(DATE_FORMAT.format(date));
        }
    }
}

方案2:全局Jackson配置(批量处理所有Date字段)

如果多个Date类型字段都需要相同的null值处理逻辑,可以在Spring Boot配置类中全局配置ObjectMapper:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Date;

@Configuration
public class JacksonGlobalConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        
        // 全局设置:序列化时包含所有null值字段
        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
        
        // 注册自定义序列化器,处理所有Date类型字段
        SimpleModule dateModule = new SimpleModule();
        dateModule.addSerializer(Date.class, new NullDateToStringSerializer());
        objectMapper.registerModule(dateModule);
        
        return objectMapper;
    }
}

注意:全局配置会影响所有Date类型字段,若仅需处理特定字段,优先选择方案1。

验证效果

修改后,当userIndDate为null时,响应结果会包含该字段并输出空字符串:

{
    "searchResponse": [
        {
            "loc": "1",
            "item": 2,
            "itemDesc": "someItemDesc",
            "locDesc": "someLocDesc",
            "ase": 1.00000000000000000,
            "aseStartDate": "2023-07-01",
            "indDate": "2023-12-30",
            "userIndDate": ""
        }
    ],
    "message": "",
    "warning": "",
    "responseCode": "0"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:38:38