我正在使用spring数据redis,我的一个实体有一个如下列表。
@RedisHash("person")
@Data
@Builder
public class Person implements Serializable {
@Id
private String name;
private List<Address> addressList;
}
public class Address implements Serializable {
private String postCode;
private String country;
}
序列化工作正常,地址存储为
HGETALL person:123456
"name"
"blabla"
"address[0].postCode"
"1111XX"
"address[1].country"
"IN"
但是在使人返回时,列表始终为null?有人可以指出我在这里做错了吗。
我的Redis配置如下所示。
@Configuration
@EnableRedisRepositories
public class RedisConfiguration {
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
final RedisTemplate<String, String> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
mapper.findAndRegisterModules();
template.setKeySerializer(redisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
}
答案 0 :(得分:0)
我有些怀疑,但是您可以分享一些有关如何使用redisTemplate将数据保存到redis的代码片段吗?
但是很可能是因为您同时设置了RedisTemplate的键和值初始化
RedisTemplate<K, V>
为<String, String>
这就是为什么即使使用Jackson2JsonSerializer也无法正确地序列化和反序列化List<Address>
类的原因。
可能的解决方案是:
@Bean
public RedisTemplate<String, Person> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate<String, Person> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
然后将整个Person对象存储到Redis
在需要时,您可以取出整个对象并实现您的getter和setter。
希望这会有所帮助