问题标签 [jsonidentityinfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - jackson 的 JsonIdentityInfo 生成纯数字
使用 Spring、3.2.7、Hibernate 4.2.12、Jackson 2.3.3 并使用 JsonIdentityInfo 在杰克逊中试验引用。
我有一个实体分类法,有父母和孩子,都引用了分类法本身。
家长:
这些孩子:
我使用 findAll 方法检索所有分类对象。这将返回所有对象树。根对象通过子关系包含所有其他分类对象。我想要一个列表中的所有对象,但在客户端,返回的列表包含 2 个根对象和其余数字(id)。
如何在客户端强制生成所有对象而不是 ID 引用?我知道我可以迭代(或递归)树并使用 id 映射对象
javascript - 在包含 JsonIdentityInfo 的 JavaScript 中反序列化 Jackson 对象
你好(对不起我的英语)
我正在开发使用 SPRING MVC 生成 json 的 web 服务的 angularjs 前端网站。spring mvc 使用 JsonIdentityInfo 选项进行序列化,因此每个对象只在 json 中写入一次,并且每次使用引用,例如她有 2 台“计算机”使用相同的对象“组件”,所以 spring 将 id 放入第一个组件 ("@componentID": 2) 和第二个组件的 id ( 2 ) :
我想要的是 :
我多次搜索执行此操作的代码,但我没有找到任何想法。
我无法编辑用于删除此行为的 Web 服务。我可以使用 javascript 或 jquery(或其他库)在客户端编辑 json 以用真正的引用对象替换引用吗?(数据实际上更复杂更深,我在对象中有 3 级子对象)。
多谢。
android - JsonMappingException:Objectify 中 OneToMany 关系的无限递归
为我与(4.0.3b)Google App Engine
一起使用的 Android 应用程序提供后端服务。Objectify
在后端我有一个简单的User
实体,它有一个list of Users
(朋友)作为关系。
现在,当我将以下用户存储在数据库中时,例如:user1
和user2
:
user1
在他的朋友列表中有user2
,反之亦然
当尝试从我的 Endpoint 获取 User 对象(具有上述循环引用)时,Android 客户端会引发以下异常:
com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]...
在这篇文章Infinite Recursion with Jackson JSON 和 Hibernate JPA 问题中,他们建议@JsonIgnore
在字段或 getter/setter 方法上使用。但是在客户端,我需要通过这些 getter/setter 方法(从生成的客户端库对象)访问朋友列表,所以这对我没有帮助。
另一个技巧是使用@JsonManagedReference 和 @JsonBackReferenceManagedReference
,在我的情况下不能应用,因为它们BackReference
会指向同一个friends
字段。
我认为可以解决我的问题的是@JsonIdentityInfo注释,它自Jackson 2.0
.
我现在的问题是我不知道如何将此注释与 Google App Engine 一起使用。GAE 使用jackson-core-asl-1.9.11
,不幸的是没有@JsonIdentityInfo
,因为它显然取决于低于 2.0 的版本。
有谁知道,我如何在 Google App Engine 中使用最新的 Jackson 版本(2.4)来使用 @JsonIdentityInfo 功能?
还是有更好的方法来解决我的问题?
java - Jackson jsonidentityinfo 反序列化失败
我正在构建一个 RESTful 服务来查看服务器关系(一个服务器可以包含另一台服务器作为其父级)。该服务接受用于 CRUD 命令的 JSON 字符串。
我在我的服务器对象中使用@JsonIdentityInfo
和@JsonIdentityReference
,以便用户收到简化的 JSON 答案,如下所示:
作为父母,我只获得父母的主机名而不是父母对象 - 这正是我想要的并且工作正常。
我的问题始于尝试反序列化更新命令(尝试更新父级时)。如果我发送这个:
什么都没有发生 - 不会设置父级。问题在于交付的 JSON 字符串:
调试hibernate 2.4.4源码后,发现我的JSON字符串生成了一个com.fasterxml.jackson.databind.deser.UnresolvedForwardReference: Could not resolve Object Id [parenthostname]
. 不会抛出此异常,但将返回 null。
当我删除@JsonIdentityInfo
and@JsonIdentityReference
时,这个 JSON 字符串可以正常工作,并且我的父级将被更新(但随后我会丢失我的简化答案并且还会出现无限循环问题)。
因此,如果我将我的 JSON 字符串调整为:
更新工作正常。但我想让简化(展开)版本工作。有任何想法吗?我很感谢任何提示。
我正在使用休眠 4.2.4 和杰克逊 2.4.4
这是我的(简化的)服务器类:
这是我的 RESTful 服务的更新类:
这是我在这里的第一个问题,所以如果我的问题可能不完全清楚,请不要过分评判我;)
json - 使用@JsonIdentityInfo 时,Jackson 在 JSON 序列化中隐藏对象引用
我有两个实体:类别和项目。
类别实体:
物品实体:
在执行这样的左连接查询后:“SELECT c from Category c Left JOIN FETCH c.itemList il”
我得到了结果,然后我对结果进行了休眠感知 JSON 序列化。
我的 HibernateAwareObjectMapper 是:
而 HibernateAwareSerializerFactory 是:
在我的调度程序 servlet 中,我写过:
所以,我有一个这样的 JSON:
在此 JSON 中,有 "@id": "971ef69e-1605-46f2-8234-b595e38be11a" 这是类别实体的对象 ID。
还有 "@id": "75a3a7e5-ce66-4f6d-a04c-d04145d92b21" 这是项目实体的对象 ID。
类别有 3 个项目因此类别的对象 ID 也显示了 2 次。像这样:“971ef69e-1605-46f2-8234-b595e38be11a”、“971ef69e-1605-46f2-8234-b595e38be11a”
生成的 JSON 序列化符合预期。但我只需要在那个json中隐藏那个对象引用“@id”。这个“@id”默认由@JsonIdentityInfo 创建。
所以我需要配置@JsonIdentityInfo 来隐藏对象ID“@id”。我试过@JsonIgnore 但失败了。
我已经用谷歌搜索了 2 天的解决方案,但失败了。谁能给我一个解决方案或建议?
java - 在 Spring 上下文中实例化的 JsonIdentityInfo 解析器
如何将 ObjectIdResolver 注册到 Spring/Jackson 对象映射器,以便 Spring 实例化 ObjectIdResolver 类?我想在我的 ObjectIdResolver 类中使用依赖注入。
ObjectIdResolver.java
订单.java
spring-servlet.xml
java - JsonIdentityInfo 用于休眠映射
我有两个实体 City 和 Type 以及这两者之间的多对多关系。我需要的是:
- 包含类型的 City 的 json
- 包含城市的类型的 json。
我正在使用 JsonIdentityInfo 来阻止映射的无限递归,但我从 JSON 中得到的并没有真正帮助我。这是我目前从城市 JSON 得到的
但我需要的是这样的:
城市 JSON 也是如此。我需要它是双向的。
这是我的实体的代码:
城市:
类型:
java - 杰克逊:@JsonIdentityInfo 对象而不是 id
有没有办法用@JsonIdentityInfo 影响序列化过程,以便插入整个对象而不是引用id?
因此,杰克逊不应引用 id 为 1 的“otherObj”,而应包括整个对象。
像这儿:
我们有双向引用,所以 @JsonManagedReference 和 @JsonBackReference 不能正常工作。此处描述了此行为 ( http://wiki.fasterxml.com/JacksonFeatureObjectIdentity )。
json - 避免休眠实体中的循环自引用
我有一个带有自引用的 Hibernate 实体
因此,当我获取所有实体时,显然我在反序列化 JSON 时面临无限递归。所以我加了
在类名之上。但是现在,JSON 只包含 id 或数字,例如
我不想要数组中的数字(2、4、3、5),但我想要实际的对象。我怎样才能做到这一点?
更新 我也经历了这个问题 ,所以这是唯一的方法吗?
json - Jackson @jsonidentityinfo 改变原来的数据结构
我有以下 2 个带有循环引用的类,为方便起见,我没有放置 getter 和 setter
如果 A.b1 和 A.b2 引用相同的 B 对象,我得到序列化的 json 如下:
但我的预期结果是:
我检查了杰克逊的源代码看起来像杰克逊存储以前使用的对象的 id/reference,如果任何其他对象使用相同的引用,它将使用 id 而不是序列化整个对象,如果对象保持在同一个循环链中,那很好,但是如果他们不会留在同一个链中,就像我的示例显示的那样很奇怪。
任何人都可以通过 @identityinfo 注释帮助获得我的预期结果?