Mik*_*elW 5 serialization lettuce spring-data-redis spring-boot
我正在将一些微服务从 SpringBoot1.5 移植到 2.1。
我们正在使用 spring-data-redis。似乎默认的内部移动从 jedis 到 lettuce。
问题是我们现在观察到一些奇怪的行为,当我们保存一个对象然后检索它时,有一个微小的差异:
空列表属性将替换为 null。
这是一个例子:
//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);
Run Code Online (Sandbox Code Playgroud)
发生的事情是这样的:
//before
{
"id": "1",
"age": 15,
"friends": []
}
//after
{
"id": "1",
"age": 15
}
Run Code Online (Sandbox Code Playgroud)
空列表friends消失了。这种新行为会在许多地方影响我们的代码,导致 NullPointerException 等。
显然,有多个可用的序列化器,但这似乎没有任何效果。任何想法?
https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:serializer
以供参考:
springBootVersion = '2.1.5.RELEASE'
springCloudVersion = 'Greenwich.SR1'
Run Code Online (Sandbox Code Playgroud)
我也遇到了这个问题。我是这样解决的:
@RedisHash(timeToLive = 60)
public class MyData implements Serializable {
@Id
private String id;
private List<Object> objects = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
MyData如果我用空列表保存objects,当我从 Redis 中提取它时,objects它不会为空,而是空列表。如果我将“MyData”保存为非空objects,objects则反序列化后不会丢失。
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |