Java中LocalDateTime序列化报错是因Jackson默认不支持Java 8时间类型,需引入jackson-datatype-jsr310依赖并注册JavaTimeModule,配置WRITE_DATES_AS_TIMESTAMPS为false以字符串格式序列化,并注意时区兼容性。

Java 中 LocalDateTime 序列化报错,通常是因为 Jackson 默认不支持 Java 8 时间类型,直接序列化会抛出 JsonMappingException,提示“No serializer found for class java.time.LocalDateTime”。解决方法是添加对应的时间模块并正确配置。
引入 Jackson 的 JavaTimeModule
Spring Boot 2.0+ 默认已自动注册 JavaTimeModule,但需确认依赖完整:
- 确保项目中包含
jackson-datatype-jsr310(Maven 坐标):
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
若使用非 Spring Boot 项目,还需手动注册模块:
ObjectMapper mapper = new ObjectMapper();mapper.registerModule(new JavaTimeModule());
配置序列化格式(可选但推荐)
默认序列化为数组形式(如 [2024,5,20,14,30,0]),体验不友好。建议统一转为字符串格式(如 "2024-05-20T14:30:00"):
立即学习“Java免费学习笔记(深入)”;
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 全局配置(Spring Boot):在
application.yml中添加
jackson:
date-format: yyyy-MM-dd HH:mm:ss
serialization: WRITE_DATES_AS_TIMESTAMPS: false
注意:WRITE_DATES_AS_TIMESTAMPS: false 是关键,它关闭时间戳模式,启用字符串格式。
- 若需自定义格式(如去掉秒、带毫秒等),可通过
@JsonFormat注解控制字段级行为:
private LocalDateTime createTime;
检查时区与反序列化兼容性
LocalDateTime 本身不含时区,反序列化时若传入带时区的 ISO 字符串(如 "2024-05-20T14:30:00+08:00"),会报错。应确保:
- 前端传参用纯本地时间字符串(无 Z 或 ±hh:mm)
- 或后端改用
ZonedDateTime/Instant配合时区处理 - 若必须兼容带时区输入,可自定义反序列化器,但一般不推荐混用
Spring MVC 全局配置(非 Boot 项目)
如果用的是传统 Spring MVC,需在配置类中显式设置 ObjectMapper:
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return mapper;
}
再将该 ObjectMapper 注入到 MappingJackson2HttpMessageConverter 中。

















