解决JDK8中LocalDateTime(反)序列化问题,报错com.fasterxml.jackson.datatype:jackson-datatype-jsr310

在Java8中,LocalDateTime类型的字段默认不受SpringBoot支持,需要添加jackson-datatype-jsr310依赖以实现序列化和反序列化。解决方案包括在pom.xml中引入特定版本的依赖,并在LocalDateTime字段上使用@JsonSerialize,@JsonDeserialize和@JsonFormat注解来指定序列化和反序列化的类及时间格式。

参考文章:

  1. https://www.shouxicto.com/article/2858.html
  2. https://blog.csdn.net/weixin_43840323/article/details/120077245

问题复现:

Java 8 date/time type `java.time.LocalDateTime` not supported by default:
 add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling....

默认情况下,SpringBoot 搭配 Java 8不支持LocalDateTime需要添加com.fasterxml.jackson.datatype:jackson-datatype-jsr310依赖

原因:没有添加序列化和反序列化器

解决方案
添加依赖

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.13.0</version>
</dependency>

为所有LocalDateTime字段添加序列化以及反序列化器注解,例如:

 @JsonSerialize(using = LocalTimeSerializer.class)
 @JsonDeserialize(using = LocalDateTimeDeserializer.class)
 @JsonFormat(pattern = "HH:mm:ss")
 private LocalTime xxx;
 
 @JsonSerialize(using = LocalDateTimeSerializer.class)
 @JsonDeserialize(using = LocalDateTimeDeserializer.class)
 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 private LocalDateTime xxx;
 
 @JsonSerialize(using = LocalDateSerializer.class)
 @JsonDeserialize(using = LocalDateTimeDeserializer.class)
 @JsonFormat(pattern = "yyyy-MM-dd")
 private LocalDate xxx;
NexusLog >>> 2025-05-09 11:34:21.763 [http-nio-8093-exec-1] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.redis.serializer.SerializationException: Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: com.chengyp.nexuslog.entities.Comment["createdAt"])] with root cause com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: com.chengyp.nexuslog.entities.Comment["createdAt"]) at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1328) at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:184) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341) at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4811) at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:4077) at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.serialize
05-10
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值