redis反序列化为什么报错 Could not read JSON: Invalid type id ?

Could not read JSON: Invalid type id 'com.salesforce.potentialCustomers.entity.PotentialCustomers_$$_jvst568_0' (for id type 'Id.class'): no such class found

image.png

使用 GenericJackson2JsonRedisSerializer 进行序列化!key 不存在时,新增不会有问题,新增完 key 也可以正常反序列化,然后重启服务再次获取 key 进行反序列化就会报错!哪位大佬提供下解决思路!感激不尽!

实体类

image.png

ID 这个属性在 DataEntity 中

阅读 3k
3 个回答

没见过你这种写法 为什么继承类得泛型还是自己这个类 不会出现问题吗

正常GenericJackson2JsonRedisSerializer序列化,会增加@class属性用于反序列化,
值是对象的包+类名,例如你这里正常应该是

’@class‘:’com.salesforce.potentialCustomers.entity.PotentialCustomers‘

但你实际存入的值是类名加了后缀,这种格式一般是指jvm中的实例地址

看你的截图,实际序列化的对象是ArrayList<Pxxxx>,所以大概率问题在JSON序列化集合结构时发生了问题,获取集合元素时,使用了实例的toString获取到了实例名称,还不是类的名称。

底层进行这个操作的是jackson的objectmapper,正常来说是不会发生这种情况的,这里看一下是不是对spring自带jackson的objectMapper进行了自定义覆盖,尤其是对集合对象转json时,元素的type是否有特殊处理。

新手上路,请多包涵

GenericJackson2JsonRedisSerializer与mybatis的懒加载存在冲突。mybatis懒加载会使用handler进行对象代理,所以类名后会多一串乱码,重启后无法找到对应类。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题