我有一个类,它有许多简单的属性(类型是int
,String
,...)。它还有一个属性,它是我的另一个类的实例。现在我想通过 Redis 发布/订阅 channel 发送对象。为此,我使用 GenericJackson2JsonRedisSerializer 对其进行序列化。由于这两个类都有自己的存储库,我不想每次都嵌入对象,而是只发送 ID。我认为通过向字段添加 org.springframework.data.annotation.Reference 注释应该可以实现这一点。
不幸的是,这不起作用,它只是嵌入了对象。我是不是做错了什么?我需要做什么才能获取序列化版本中的对象 ID?
感谢您的帮助!
最佳答案
好吧,经过对这样一个基本的事情进行了太多的研究,我终于弄清楚了如何做到这一点。
基本上,我需要将 com.fasterxml.jackson.annotation.JsonIdentityInfo
注释添加到类或字段中。正如问题中已经指出的,这产生了相同的结果,第一次完全包含,后来仅引用。
没有文档提到如何始终拥有ID,我不得不查看代码:还有另一个注释com.fasterxml.jackson.annotation.JsonIdentityReference
,它有一个名为alwaysAsId的 boolean 属性
。如果将此设置为 true,它总是添加 id 而不是对象。
要使反序列化正常工作,需要为 ids 指定一个自定义解析器。由于我使用 Spring,因此可以很容易地访问我的存储库。
关于java - Spring Redis JSON序列化器嵌入引用字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554800/