java - Spring Redis JSON序列化器嵌入引用字段

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

我有一个类,它有许多简单的属性(类型是intString,...)。它还有一个属性,它是我的另一个类的实例。现在我想通过 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/

相关文章:

jpa - 为什么对我的 JPA 实体所做的更改不会持久保存到数据库中?

java - 如何以最少的代码编辑来更改属性类型?

c# - 将 JSON 字符串解析为对象的最简单的 C# 函数是什么?

php - 如何将查询的值放入对象中并将其返回到另一个脚本?

java - 我们可以将多个参数传递给 RestCypherQueryEngine.query 吗?

java - 防止内部事务回滚外部事务

java - eclipse RCP java.lang.ClassNotFoundException : org. eclipse.core.runtime.adaptor.EclipseStarter

Java ScriptEngine 添加 'long' 失败?

java - 在 Swing 中向 JList 添加滚动条

php - 无法在 Laravel 中对数据进行分页