我有一个具有许多简单属性的类(类型为int
,String
,...)。它还有一个属性,它是我的另一个类的实例。现在我想通过Redis发布/子频道发送对象。为此,我使用GenericJackson2JsonRedisSerializer
对其进行序列化。由于这两个类都有自己的存储库,我不希望每次都嵌入对象,而只是发送ID。我认为通过在字段中添加org.springframework.data.annotation.Reference
注释可以实现这一点。
不幸的是,这不起作用,而只是嵌入了对象。有什么我做错了吗?如何在序列化版本中获取对象的ID,我该怎么做?
感谢您的帮助!
答案 0 :(得分: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,我认为您在序列化/反序列化数据时必须实现自己的引用。
您可以使用
实现自己的SerializerYourObjectSerializer扩展了Jackson2JsonRedisSerializer
答案 1 :(得分:1)
在对这样一个基本的事情做了太多的研究后,我终于想出了如何做到这一点。
基本上我需要将com.fasterxml.jackson.annotation.JsonIdentityInfo
注释添加到类或字段中。正如在问题中已经说明的那样,这产生了相同的结果,第一次完全包括在内,之后仅被引用。
没有文档提到如何始终拥有id,我不得不查看代码:还有另一个注释com.fasterxml.jackson.annotation.JsonIdentityReference
,它有一个名为alwaysAsId
的布尔属性。如果将此值设置为true,则始终会添加id而不是对象。
要进行反序列化工作,需要为id指定自定义解析器。当我使用Spring时,很容易访问我的存储库。