J'essaie d'utiliser le @JsonIdentityInfo de Jackson 2 comme décrit here.Comment utiliser @JsonIdentityInfo avec des références circulaires?
Pour des fins de test j'ai créé les deux catégories suivantes:
public class A
{
private B b;
// constructor(s) and getter/setter omitted
}
public class B
{
private A a;
// see above
}
Bien sûr, les failes approche naïve:
@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);
}
Ajout @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
à la classe A et/ou B ne fonctionne pas non plus .
J'espérais que je pouvais sérialisation (et deserialize plus tard) a
à quelque chose comme ceci: (pas trop sûr de la JSON bien)
{
"b": {
"@id": 1,
"a": {
"@id": 2,
"b": 1
}
}
}
Comment puis-je faire cela?
Cela fonctionne très bien pour moi et génère '{" @id ": 1," b ": {" @ id ": 2," a ": 1}}'. –
Étrange. J'utilise jackson-jr-all-2.7.4.jar et com.fasterxml.jackson.jr.ob.JSON. Quelle classe JSON avez-vous utilisée? Avec l'annotation sur les deux classes? – Burkhard
Je viens de créer un 'ObjectMapper' et d'utiliser' writeValueAsString'. (C'est avec vos annotations '@ JsonIdentityInfo'.) –