为什么要添加序列化版本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
好啦,然后就搞定啦。