First of all, I create a parent class implements Serializable, then create a child class to extends it. And I use RedisTemplate with GenericFastJsonRedisSerializer config to put data into redis, but when I get it back from Reids, the data is changed.Please tell me why and how to fix it?
@Datapublic class People implements Serializable { public Long id; public String name;}@EqualsAndHashCode(callSuper = true)@Datapublic 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) }