ジャクソン2の@JsonIdentityInfoをhereのように使用しようとしています。もちろん循環参照で@JsonIdentityInfoを使用するにはどうすればよいですか?
public class A
{
private B b;
// constructor(s) and getter/setter omitted
}
public class B
{
private A a;
// see above
}
、単純なアプローチの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);
}
クラスAおよび/またはクラスBに@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
を追加すると、いずれかの動作しません。私は、次の2つのクラスを作成したテストのため
。
私はこのような何かに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クラスを使用しましたか?両方のクラスのアノテーションを使用していますか? – Burkhard
私は 'ObjectMapper'を作成し、' writeValueAsString'を使用しました。 (これはあなたの '@JsonIdentityInfo'アノテーションにあります) –