【发布时间】:2021-07-09 20:01:52
【问题描述】:
首先,我创建一个父类实现Serializable,然后创建一个子类来扩展它。我使用 RedisTemplate 和 GenericFastJsonRedisSerializer 配置将数据放入 redis,但是当我从 Reids 取回数据时,数据已更改。请告诉我为什么以及如何修复它?
@Data
public class People implements Serializable {
public Long id;
public String name;
}
@EqualsAndHashCode(callSuper = true)
@Data
public class Student extends People{
private String sName;
}
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
RedisSerializer keySerializer = new StringRedisSerializer();
RedisSerializer valueSerializer = new GenericFastJsonRedisSerializer();
redisTemplate.setDefaultSerializer(valueSerializer);
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
RedisUtil.init(redisTemplate);
return redisTemplate;
}
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
public void cacheDeserialize(){
Student student = new Student();
student.setId(11111111111111111L);
student.setName("parent name");
student.setSName("child name");
redisTemplate.opsForValue().set("parent-child-test", student);
Object value = redisTemplate.opsForValue().get("parent-child-test");
System.out.println(value); // print:Student(sName=child name), but I wish it print Student(id=111111111,name=parent name,sName=child name)
}
【问题讨论】: