【问题标题】:Jackson mapper write id instead of entire object杰克逊映射器写入 id 而不是整个对象
【发布时间】:2015-01-26 09:27:56
【问题描述】:

我正在使用jackson 2.4.2来映射一些休眠结果,因为休眠对象可能非常复杂,我收到的问题是,我有一个休眠对象列表,其中一些可能引用同一个对象,因此jackson只映射对象一次,所有其他对象只映射为一个id。我不希望它表现得像这样,并且无论它是否在其他对象中解析,都希望它把对象写为对象。

【问题讨论】:

标签: json jackson


【解决方案1】:

向我们展示一些代码,尤其是你的类结构和 json/xml 或任何结果。

但我认为问题在于您只是将 object_id 保存为整数而不是对象。

错误:

public class Foo {
    private String name;
    private Integer foo_id;
}

正确:

public class Foo {
    private String name;
    private Foo foo;
}

【讨论】:

  • 我认为问题是我正在使用休眠,我有两个休眠对象A和B,A有一个字段引用对象B,B有一个带有@id注释的字段,所以当我从休眠中得到一个 db 结果,我可能有几个对象 A 引用同一个对象 B,引用对象 B 的第一个对象 A 解析正确,但是对象 A 引用同一个对象 B 只有一个 ID 而不是整个对象。显示代码有点困难。但我基本上做的是创建一个 ObjectMapper,然后在我从休眠中获得的对象列表上使用 writeValueAsString。
  • 嗯,你可以做的是获取对象 B,然后对象 A 的列表引用 B。现在你可以循环遍历列表并手动分配关系。但我不知道为什么其他对象没有被正确解析..
  • 似乎因为hibernate从缓存中获取,所以所有具有相同id的对象B都只是引用第一个,而杰克逊很聪明,只解析引用对象的id。我想知道您可以在杰克逊中关闭参考ID解析并始终解析完整的对象。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 2014-10-10
  • 2011-10-22
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多