1

我有一个具有许多简单属性的类(类型是int, String,...)。它还有一个属性,它是我的另一个类的实例。现在我想通过 Redis 发布/订阅通道发送对象。为此,我使用GenericJackson2JsonRedisSerializer. 由于两个类都有自己的存储库,我不想每次都嵌入对象,而是只发送 ID。我认为这应该可以通过org.springframework.data.annotation.Reference在字段中添加注释来实现。

不幸的是,这不起作用,它只是嵌入了对象。是不是我做错了什么?我需要做什么才能在序列化版本中获取对象的 ID?

谢谢您的帮助!

4

2 回答 2

1

你用过Spring Data Redis吗?http://projects.spring.io/spring-data-redis/

检查http://docs.spring.io/spring-data/redis/docs/current/reference/html/#redis.repositories.references

如果您不使用 Spring Data Redis,我认为您应该在序列化/反序列化数据时实现自己的引用。

您可以实现自己的序列化器

YourObjectSerializer 扩展 Jackson2JsonRedisSerializer

于 2016-07-25T14:34:50.073 回答
1

好吧,在对这样一个基本的事情进行了太多的研究之后,我终于想出了如何去做。

基本上我需要将com.fasterxml.jackson.annotation.JsonIdentityInfo注释添加到类或字段中。正如问题中已经说明的那样,这产生了相同的结果,第一次完全包括在内,之后仅被引用。

没有文档提到如何始终拥有 id,我不得不查看代码:还有另一个注释com.fasterxml.jackson.annotation.JsonIdentityReference,它有一个名为alwaysAsId. 如果将此设置为 true,它总是添加 id 而不是对象。

要使反序列化工作,需要为 id 指定一个自定义解析器。当我使用 Spring 时,访问我的存储库非常容易。

于 2016-07-25T22:32:08.290 回答