Spring Redis JSON序列化程序嵌入了引用字段

时间:2016-07-24 17:31:03

标签: java json spring-data spring-data-redis jackson2

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

不幸的是,这不起作用,而只是嵌入了对象。有什么我做错了吗?如何在序列化版本中获取对象的ID,我该怎么做?

感谢您的帮助!

2 个答案:

答案 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,我认为您在序列化/反序列化数据时必须实现自己的引用。

您可以使用

实现自己的Serializer
  

YourObjectSerializer扩展了Jackson2JsonRedisSerializer

答案 1 :(得分:1)

在对这样一个基本的事情做了太多的研究后,我终于想出了如何做到这一点。

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

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

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