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

Jackson反序列化LocalDateTime时InvalidDefinitionException报错的解决方法

解决Jackson反序列化LocalDateTime的错误

核心原因

错误本质是Jackson无法直接将字符串格式日期转换为LocalDateTime对象,即便添加了序列化/反序列化注解,仍存在两个常见问题:

  1. 缺少Java 8时间API的Jackson支持模块
  2. 未明确指定与JSON日期字符串匹配的格式

具体解决步骤

1. 引入jackson-datatype-jsr310依赖

这是Jackson支持Java 8时间API的核心模块,必须确保项目已引入:

  • Maven项目(pom.xml):
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>与项目jackson版本一致</version>
</dependency>
  • Gradle项目:
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:与项目jackson版本一致'

2. 指定日期匹配格式

有两种可选方式:

方式一:字段级注解配置

修改实体类字段,添加@JsonFormat指定格式:

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "GMT+8")
public LocalDateTime date;

pattern需严格匹配JSON中的日期格式(示例对应2023-09-22 01:07:50.062477),timezone根据业务时区调整。

方式二:全局ObjectMapper配置

如果多个字段需要处理,推荐全局配置避免重复注解:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    JavaTimeModule module = new JavaTimeModule();
    // 配置反序列化格式
    module.addDeserializer(LocalDateTime.class, 
        new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS")));
    // 配置序列化格式
    module.addSerializer(LocalDateTime.class, 
        new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS")));
    mapper.registerModule(module);
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    return mapper;
}

配置后实体类字段可简化为:

public LocalDateTime date;

3. 检查实体类构造器

若实体类没有无参构造器,Jackson无法实例化对象,需补充:

public YourEntityClass() {
    // 无参构造器
}

验证

完成配置后重新运行程序,Jackson即可正确将JSON日期字符串反序列化为LocalDateTime对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:17:37