解决:class invalid for deserialization序列化的问题(真是有限)

为什么要添加序列化版本ID了(serialVersionUID)?

通过判断实体类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,

如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,并且服务器上的项目运行一段时间后就会莫名其妙的崩掉,因为实体类没有序列化

和生成版本ID造成内存溢出。


一、序列化问题

首先来看看异常:

java.io.InvalidClassException: com.gws.newframe.entity.test.TestUser; class invalid for deserialization
    at java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:157) ~[na:1.8.0_161]
    at java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:862) ~[na:1.8.0_161]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2034) ~[na:1.8.0_161]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567) ~[na:1.8.0_161]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427) ~[na:1.8.0_161]
    at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:72) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
"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.gws.newframe.entity.test.TestUser; class invalid for deserialization"

二、解决方案

那么错误说得很清楚,就是序列化的问题!

解决方案一:安装插件GenerateSerialVersionUID

这里写图片描述

解决方案二:File->setting->Inspections->Serializationissues

将其展开后将serialzable class without “serialVersionUID”打上勾;如下图:
这里写图片描述

设置完成后。一定要重启IDEA。

三、生成UID

实现序列化接口——把鼠标放到实体类上——点击黄色灯泡——生成UID
这里写图片描述

好啦,然后就搞定啦。

猜你喜欢

转载自blog.csdn.net/wd2014610/article/details/80903336