问题描述
我将 Spring Boot 2.4.2
与
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在我的应用中,我有
package com.tuto.app1;
import lombok.Data;
@Data
public class Student {
private String firstName;
private String lastName;
private int age;
}
还有
@Bean
public CacheManager redisCacheManager() {
RedisSerializationContext.SerializationPair<Object> jsonSerializer =
RedisSerializationContext.SerializationPair.fromSerializer(new new Jackson2JsonRedisSerializer<>(Object.class));
return RedisCacheManager.RedisCacheManagerBuilder
.fromConnectionFactory(redisConnectionFactory())
.cacheDefaults(
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1))
.serializeValuesWith(jsonSerializer)
)
.build();
}
和
@GetMapping("/students/{name}")
@Cacheable(value = "student")
public Student getStudent(@PathVariable String name) {
Student student = new Student();
student.setFirstName("John");
student.setLastName(name);
student.setAge(30);
return student;
}
第一次调用 http://.../app1/students/toto
返回
{
"firstName": "John","lastName": "toto","age": 30
}
在缓存中我有
{"firstName":"John","lastName":"toto","age":30}
好的,这就是我想要的。
但是......所有其他对http://.../app1/students/toto
的呼叫都在给我
class java.util.LinkedHashMap cannot be cast to class com.tuto.app1.Student (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.tuto.app1.Student is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @32bd421)
java.lang.classCastException: class java.util.LinkedHashMap cannot be cast to class com.tuto.app1.Student (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.tuto.app1.Student is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @32bd421)
解决方案是什么?
解决方法
你可以为redis设置json字符串数据。 例如:
redistemplate.opsxxx.set("key",JSON.toJsonString(new JavaBean()));
String json = redistemplate.opsxxx.get("key");
//convert
JSON.parseObject(json,JavaBean.class);