报错信息
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
查看后发现是数据从redis中取出时,Jackson2反序列化数据处理LocalDateTime类型时出错,原因是:Jackson2在序列化LocalDateTime时输出的不是普通的字符串时间格式,而是如下所示的格式(普通时间格式:2019-02-27 12:10:17)。
"registeredTime": {
"nano": 251128500,
"year": 2020,
"monthValue": 2,
"dayOfMonth": 15,
"hour": 16,
"minute": 17,
"second": 2,
"month": "FEBRUARY",
"dayOfWeek": "SATURDAY",
"dayOfYear": 46,
"chronology": {
"@class": "java.time.chrono.IsoChronology",
"id": "ISO",
"calendarType": "iso8601"
}
}
解决方法
LocalDateTime属性加上注解
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
public class Demo {
private Long id;
private String name;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime time;
......
}
redis再次存入之后结构
{
"@class": "com.karmay3d.Demo",
"id": 10000000001,
"name": "测试序列化",
"time": [2017,8,15,14,57,37,525000000]
}
之后反序列化就可以取出Demo对象了。
本文解决Jackson2在处理LocalDateTime类型反序列化时遇到的问题,通过使用自定义的序列化和反序列化器,成功将数据从Redis中正确读取。

1278

被折叠的 条评论
为什么被折叠?



