1

IDMLlibを使用して IDML ファイルを POJO にロードしていますが、 Jackson JSONを使用して結果の Java オブジェクトを JSON にシリアル化しようとすると、無限再帰の問題が発生し続けます。

Caused by JsonMappingException: Infinite recursion (StackOverflowError)
(through reference chain: 
de.fhcon.idmllib.api.elements.preferences.Preferences["layoutAdjustmentPreference"]
->de.fhcon.idmllib.api.elements.preferences.LayoutAdjustmentPreference["parent"]
... etc

->>  539 | serializeFields in com.fasterxml.jackson.databind.ser.std.BeanSerializerBase

これは、解析中に複数の機会に発生します。
Idml.document -> Document.root -> Idml.document -> Document.root も同様のものです。

Jackson の ObjectMapper を使用して、POJO を JSON に変換しています。

Idml idml = new Idml("test.idml");
ObjectMapper mapper = new ObjectMapper();
String JSONstring = mapper.writeValueAsString(idml);

IDMLlib クラスはコンパイルされているため、変更を加えることはできません。
IDMLlib が返す Java オブジェクトを自分で作成せずに使用できる方法を知っている人はいますか?

編集:
全体を通して「ルート」と「親」の両方への参照が多数あるようです。基本的に私が求めているのは、オブジェクトを変更せずにシリアル化できる方法を誰かが知っているかどうかです

4

2 に答える 2

0

参照が単純な親/子タイプのものである場合(それはそうであるように聞こえます)、注釈を使用するだけです:

// on parent object
@JsonManagedReference
public ChildOb child;

// on child object
@JsonBackReference ParentOb parent;

そして、ジャクソンは「子」だけが書き出されるように物事をシリアル化します(親は書き出されません)。そして、逆シリアル化するとき、それは物事を再リンクします。

于 2012-10-02T21:19:45.533 に答える
0

Jackson は、何らかの理由でオブジェクトのプロパティの 1 つにアクセスできない場合、またはそのプロパティの 1 つをシリアル化できない場合に、この種の例外をスローする傾向があります。

シリアル化しようとしているオブジェクトに注釈を指定しない場合、Jackson は再帰を深く掘り下げて、すべてをシリアル化しようとします。

一部のプロパティまたはフィールドを無視するように Jackson に指示できる可能性はありませんか?

Pojo が Hibernate によって初期化された経験があり、Hibernate の遅延読み込みで使用したすべてのプロパティに「@JacksonIgnore」を追加する必要があります。

于 2012-10-02T12:46:50.480 に答える