...data.redis.serializer.SerializationException: Cannot deserialize; ....
·
原本报错:
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 org.springframework.core.NestedIOException: Failed to deserialize object type; nested exception is java.lang.ClassNotFoundException: com.ljt.yupictureddd.domain.user.entity.User
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:84) ~[spring-data-redis-2.7.6.jar:2.7.6]
/*请注意上一行的spring-data-redis。和我这个报错的类叫User*/
/*下面还有一个报错分析caused by*/
Caused by: java.lang.ClassNotFoundException: com.ljt.domain.user.entity.User
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
提醒一下,在看这篇文章之前,一定要比对一下你的报错
1.是不是在spring-data-redis中报错的(~[spring-data-redis-xxxx]);
2.是不是下面报错分析caused by是不是类找不到(ClassNotFoundException)。
如果不是相同的报错,可以退出文章了
我这个项目使用了spring-session-data-redis,redis分布式session。用来保存登陆状态
我这里spring-data-redis的报错是因为我用了分布式session,这个分布式session的方式我选的是用redis缓存的。我用分布式session存储用户的登陆态。
但是,我把User对象移动到另外一个包了(从domain包移动到domain.user.entity包下了),但是redis方式的分布式session中,redis缓存的数据中每一个登陆态记录里面会存一个包名。我刚刚不是说了吗,我把User对象移动到另外一个包了,所以redis里面存的包名是过期的无效的包名了。
解决方法:
删除spring-session有关的reids缓存即可,甚至都不用重启项目

更多推荐



所有评论(0)