Spring Redis JSON 序列化程序嵌入引用字段
Spring Redis JSON serializer embeds referenced field
我有一个 class,它有许多简单的属性(类型是 int
、String
、...)。它还有一个属性,它是我的另一个 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 时,访问我的存储库非常容易。
我有一个 class,它有许多简单的属性(类型是 int
、String
、...)。它还有一个属性,它是我的另一个 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 时,访问我的存储库非常容易。