首先,我创建了一个实现Serializable的父类,然后创建一个子类来扩展它。我使用带有GenericFastJsonRedisSerializer配置的RedisTemplate将数据放入redis,但是当我从Reids取回数据时,数据是changed.Please告诉我为什么和如何修复它?
@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)
}发布于 2021-07-09 17:19:24
解决方案一:在智利类中使用Lombok.annotation @ToString(callSuper = true);
解决方案二:将父类属性转换为子类属性;
发布于 2021-07-09 20:01:53
您需要使用Serializable实现这两个类,并像这样定义serialVersionUID
public class People implements Serializable {
private static final long serialVersionUID = 7156526077883281623L;
}https://stackoverflow.com/questions/68312906
复制相似问题