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

ObjectMapper解析JSON时日期字段lastDefaultDate返回null问题

问题解决:JSON转对象时lastDefaultDate字段为null的原因及修复方案

核心原因

出现这个问题有两个关键因素:

  1. 字段命名不匹配:JSON中的键是LastDefaultDate(PascalCase格式),而类中对应的字段是lastDefaultDate(camelCase格式),默认的JSON序列化/反序列化规则无法自动映射这两种命名格式。
  2. 日期格式不兼容:JSON里的日期字符串是"1915-04-14 00:00:00",而Jackson(假设你用的是这个库)默认的日期解析格式不支持这种带空格分隔的日期时间格式,导致无法将字符串转换为Date对象,最终赋值为null。

修复方案

方案一:字段级注解配置(推荐)

直接在类的字段上添加注解,明确指定JSON键名和日期格式:

@Data
@JsonIgnoreProperties({"document"})
public class RiskClass implements KeyedObject {

    @JsonProperty("Risk")
    String risk;

    @JsonProperty("Classification")
    String classification;

    @JsonProperty("LastDefaultDate")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // 时区按需调整
    Date lastDefaultDate;

    @Override
    public String getKey() {
        return risk;
    }
}
  • @JsonProperty:指定当前字段对应的JSON键名,解决大小写命名不匹配问题。
  • @JsonFormat:明确日期字符串的解析格式,让JSON库能正确将字符串转为Date对象。

方案二:全局配置JSON解析规则

如果项目中有大量类似命名格式的类,可以全局配置Jackson的解析规则,避免逐个字段加注解:

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 自动将JSON的PascalCase键名转为类的camelCase字段名
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE_TO_LOWER_CAMEL_CASE);
        // 设置全局日期解析格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        return objectMapper;
    }
}

这种方式下,RiskClass可以保持原有代码结构,无需添加字段级注解。

验证

修改后重新执行JSON转对象的代码,lastDefaultDate字段就能正确读取JSON中的日期值,不会再为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:15:47