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

Spring Redis JSON serializer embeds referenced field

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

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

感谢您的帮助!

你用过Spring数据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 我认为你应该在 serialize/deserialize 你的数据时实现你自己的引用。

您可以使用

实现您自己的序列化程序

YourObjectSerializer extends Jackson2JsonRedisSerializer

好吧,在对这样一个基本的东西进行了太多研究之后,我终于想出了怎么做。

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

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

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