ERROR 16652 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] threw exception
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.example.myblog.entity.UserInfo; class invalid for deserialization
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:84) ~[spring-data-redis-2.7.14.jar:2.7.14]
at
看上面红色部分报错SerializationException序列化异常,在session缓存到redis中时,要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis。
1.引入依赖框架
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.在properties或yml中Redis配置
#此处为properties文件语法格式
#Redis配置连接信息
#服务器ip
spring.redis.host=Redis所在服务器ip
#redis默认端口6379
spring.redis.port=6379
#存储到DB5
spring.redis.database=5
spring.session.store-type=redis
#session过期时间1800s
server.servlet.session.timeout=1800
spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=spring:session
3.启动文件中加入注解@EnableCaching
@EnableCaching//设置全局redis注解
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class MyBlogSsmApplication {
public static void main(String[] args) {
SpringApplication.run(MyBlogSsmApplication.class, args);
}
}
4.对象序列化
@Data
//实现Serializable接口,将Userinfo对象序列化
public class UserInfo implements Serializable{
//Integer可以接收普通数值和null值,int接收null会报错
private Integer id;
private String username;
public String password;
private String photo;
private LocalDateTime createtime;
private LocalDateTime updatetime;
private Integer state;
}
通过上述配置在设置session对象时会自动将session对象缓存到Redis,也可以自动在Redis获取session对象值