serialVersionUID-反序列化异常

一、异常详情

2023.07.07 11:20:10.195 ERROR [http-nio-9190-exec-1] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; 
nested exception is org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: 
Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; 
nested exception is java.io.InvalidClassException: com.xxxx.xxxx.vo.McnListVo; 
local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -5384880232592800776] with root cause java.io.InvalidClassException: com.huitun.kuaishou.vo.McnListVo; 
local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -5384880232592800776

二、异常原因分析

  1. 没有固定serialVersionUID 值 ,即序列化类中没有增加
  private static final long serialVersionUID = 1L;

当然也可不增加,但是要注意对象放入缓存中的使用。
2. redis缓存使用 即将结果出参类LiveRankVO设置进了缓存,且,后续更新代码时,该出参类LiveRankVO被修改,但是缓存中依然是修改前的旧对象。

三、异常解决办法

  1. 设置固定的serialVersionUID 值 ,即在序列化类中增加
  private static final long serialVersionUID = 1L;

设置serialVersionUID 后,序列化和反序列化的时候不会因为对象修改后的serialVersionUID 不同而导致异常,若使用过缓存依然要及时清理缓存。
2. 清除redis缓存 将缓存中的旧对象数据清除后,重新缓存进去。(也是本人当时解决的办法),建议还是要规范实体类实现序列化,增加
固定的serialVersionUID,以免出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值