Ich versuche, die @JsonIdentityInfo von Jackson 2 wie beschrieben here zu verwenden.Wie @JsonIdentityInfo mit Zirkelverweisen verwenden?
Zu Testzwecken habe ich die folgenden zwei Klassen:
public class A
{
private B b;
// constructor(s) and getter/setter omitted
}
public class B
{
private A a;
// see above
}
Natürlich die naive Ansatz failes:
@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")
der Klasse A und/oder Klasse B entweder nicht funktioniert Hinzufügen .
Ich hatte gehofft, dass ich (und später deserialize) a
zu so etwas wie dieses serialisieren könnte: (nicht ganz sicher über die JSON obwohl)
{
"b": {
"@id": 1,
"a": {
"@id": 2,
"b": 1
}
}
}
Wie kann ich das tun?
Das funktioniert gut für mich und erzeugt '{" @id ": 1," b ": {" @ id ": 2," a ": 1}}'. –
Seltsam. Ich benutze jackson-jr-all-2.7.4.jar und com.fasterxml.jackson.jr.ob.JSON. Welche JSON-Klasse hast du benutzt? Mit der Anmerkung zu beiden Klassen? – Burkhard
Ich habe gerade einen 'ObjectMapper' erstellt und' writeValueAsString' verwendet. (Dies ist mit Ihren @ JsonIdentityInfo Annotationen.) –