首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-data-redis,空列表属性值变为null

spring-data-redis,空列表属性值变为null
EN

Stack Overflow用户
提问于 2019-07-17 18:10:20
回答 1查看 417关注 0票数 4

我正在将一些微服务从SpringBoot1.5移植到2.1。

我们使用spring-data-redis。似乎默认的内部模式是从jedis转移到lettuce。

问题是,我们现在观察到一些奇怪的行为,当我们保存一个对象,然后检索它时,有一个微小的区别:

空列表属性将替换为null。

下面是一个示例:

代码语言:javascript
复制
//repo 
public interface TestRepository extends CrudRepository<Test, String> {}

...

//object
@RedisHash(timeToLive = 60) 
public static class Test{
    @Id private String id;
    int age;
    List<String> friends;
}

...

//saving then retreiving
Test test = new Test("1", 15, Collections.emptyList());
System.out.println(test);
testRepository.save(test);

Test testGet = testRepository.findById("1").get();
System.out.println(testGet);

这就是发生的事情:

代码语言:javascript
复制
//before
{
  "id": "1",
  "age": 15,
  "friends": []
}

//after 
{
  "id": "1",
  "age": 15
}

friends空列表已消失。这种新的行为会在很多地方影响我们的代码,导致NullPointerExceptions等。

显然,有多个序列化程序可用,但这似乎没有任何效果。有什么想法吗?

https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:serializer

供参考:

代码语言:javascript
复制
        springBootVersion = '2.1.5.RELEASE'
        springCloudVersion = 'Greenwich.SR1'
EN

回答 1

Stack Overflow用户

发布于 2021-05-08 01:16:11

我也遇到过这个问题。我是这样解决的:

代码语言:javascript
复制
@RedisHash(timeToLive = 60) 
public static class MyData implement Serializable {

    @Id
    private String id;
    
    
    private List<Object> objects = new ArrayList<>();
}

如果我用空的列表objects保存MyData,当我从Redis中拉出它时,里面的objects不会是空的,而是空的列表。如果我用不为空的objects保存'MyData‘,objects不会在反序列化后丢失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57073466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档