gpt4 book ai didi

redis - Spring data redis 在反序列化 List 类型时返回 null

转载 作者:可可西里 更新时间:2023-11-01 10:52:38 24 4
gpt4 key购买 nike

我正在使用 spring data 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"

但是在让这个人回来的时候列表总是空的?有人可以指出我在这里做错了什么。

我的 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;
}
}

最佳答案

我有些怀疑,但你能分享更多关于如何使用 redisTemplate 将数据保存到 redis 的代码片段吗?

但很可能是因为您同时设置了 RedisTemplate 的 Key 和 Values 初始化

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。

希望对你有帮助

关于redis - Spring data redis 在反序列化 List 类型时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com