反序列化期间出现InvalidClassException异常

问题描述

在从会话反序列化对象期间获取InvalidClassException。我们存储在数据库中的用户数据,并在对服务器的下一个请求中,从表中加载用户数据以进行少量检查。原始值serialVersionUID在该类中定义为1L,并且该类从很长时间以来就没有变化。不知道在反序列化对象时如何收到这个新的serialVersionUID值79642633333,并且此错误在并非到处都是的几个群集/服务器中出现。

我检查了类路径中是否存在重复的jar版本或重复的类。

java.io.InvalidClassException: com.test.User; local class incompatible: stream classdesc serialVersionUID = 1,local class serialVersionUID = 79642633333

Value defined in the class:
 private static final long serialVersionUID = 1L;

解决方法

反序列化期间,接收方JVM将与对象关联的唯一ID与本地类Unique ID进行比较,即JVM还将基于相应的.class文件创建唯一ID。接收器系统。如果两个唯一ID都匹配,则将仅执行反序列化。否则,我们将得到InvalidClassException。这个唯一的标识符不过是SerialVersionUID。

因此,基本上,序列化期间的SerialVersionUID应该与SerialVersionUID反序列化相匹配。