报错
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)
at [Source: (byte[])"{"@class":"com.hikvision.eurs.model.entity.DeviceUpConfigEntity","deviceId":"d64e99946f564c5b85afa0282fa1d7c4","deviceName":"B85_NPQ","regionId":"6a52983e-1e60-4a01-832d-74bde674b384","regionName":null,"ipAndPort":"10.65.90.180:8000","versions":"V1.1.2 build 211218","onlineStatus":null,"upgradeStartDate":"2021-12-08","upgradeEndDate":"2021-12-08","upgradeStartTime":["java.util.Date","04:32"],"upgradeEndTime":["java.util.Date","12:30"],"lastIssueTime":null,"issueStatus":null,"operationID":null,"c"[truncated 268 bytes]; line: 1, column: 513] (through reference chain: com.hikvision.eurs.model.entity.DeviceUpConfigEntity["createTime"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:189)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:161)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:130)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:97)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromAny(AsPropertyTypeDeserializer.java:193)
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:712)
at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:68)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3092)
at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:131)
... 85 common frames omitted
......
redis中查看
{
"upgradeEndDate": {
"year": 2021,
"month": "DECEMBER",
"dayOfWeek": "WEDNESDAY",
"era": "CE",
"dayOfYear": 342,
"leapYear": false,
"monthValue": 12,
"dayOfMonth": 8,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"createTime": {
"nano": 0,
"year": 2021,
"monthValue": 12,
"dayOfMonth": 21,
"hour": 10,
"minute": 57,
"second": 39,
"month": "DECEMBER",
"dayOfWeek": "TUESDAY",
"dayOfYear": 355,
"chronology": {
"@class": "java.time.chrono.IsoChronology",
"id": "ISO",
"calendarType": "iso8601"
}
},
"updateTime": null
}
解决方案
指定LocalDateTime/LocalDate的序列化和反序列化
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate upgradeEndDate;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createTime;
问题就解决了。
redis中查看
{
"upgradeEndDate": "2021-12-08",
"createTime": [2021,12,21,10,57,39],
}
此时可以反序列化成功!
原因
redis 序列化方式
实体类
@ApiModelProperty(value = "创建时间",hidden = true)
@TableField(value = "create_time",fill = FieldFill.INSERT)
private LocalDateTime createTime;
参考:https://www.cnblogs.com/chuzihang/p/8492863.html