【发布时间】:2016-09-15 03:06:09
【问题描述】:
我正在尝试使用来自 Jackson 2 的 @JsonIdentityInfo,如 here 所述。
出于测试目的,我创建了以下两个类:
public class A
{
private B b;
// constructor(s) and getter/setter omitted
}
public class B
{
private A a;
// see above
}
当然,天真的方法失败了:
@Test
public void testJacksonJr() throws Exception
{
A a = new A();
B b = new B(a);
a.setB(b);
String s = JSON.std.asString(a);// throws StackOverflowError
Assert.assertEquals("{\"@id\":1,\"b\":{\"@id\":2,\"a\":1}}", s);
}
将@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id") 添加到 A 类和/或 B 类也不起作用。
我希望我可以将a 序列化(然后反序列化)成这样的东西:(虽然不太确定 JSON)
{
"b": {
"@id": 1,
"a": {
"@id": 2,
"b": 1
}
}
}
我该怎么做?
【问题讨论】:
-
这对我来说很好,并生成
{"@id":1,"b":{"@id":2,"a":1}}。 -
奇怪。我正在使用 jackson-jr-all-2.7.4.jar 和 com.fasterxml.jackson.jr.ob.JSON。你用过什么 JSON 类?两个类都有注释?
-
我刚刚创建了一个
ObjectMapper并使用writeValueAsString。 (这是您的@JsonIdentityInfo注释。)
标签: java json jackson circular-reference jackson2