2012-02-02 15 views
1

jacksonはのような循環例外を処理/スローしますか?net.sf.json.JSONException:階層にサイクルがあります。は、jsonで変換されるJavaオブジェクトのサイクルを検出するとjson-libにスローされます。もしそうなら、私たちはそれをどのように処理できますか?事前にjacksonはCyclic例外をスローしますか?

1169 SEVERE: Servlet.service() for servlet JSONControllerServletGZIP threw exception 
    1170 net.sf.json.JSONException: There is a cycle in the hierarchy! 
    1171  at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsArray(CycleDetectionStra 
    1172  at net.sf.json.JSONArray._fromCollection(JSONArray.java:749) 
    1173  at net.sf.json.JSONArray.fromObject(JSONArray.java:165) 
    1174  at net.sf.json.JSONObject._processValue(JSONObject.java:2132) 
    1175  at net.sf.json.JSONObject._setInternal(JSONObject.java:2177) 
    1176  at net.sf.json.JSONObject.setValue(JSONObject.java:1005) 
    1177  at net.sf.json.JSONObject._fromMap(JSONObject.java:886) 
    1178  at net.sf.json.JSONObject.fromObject(JSONObject.java:248) 

感謝をたどるようJSON-libに投げ

エラーがあります。

答えて

1

あなたは@JsonBackReference@JsonManagedReferenceが必要です。

+0

おかげでビールバジャイ。大規模で複雑なJavaオブジェクトをJSONに変換する際に、考えられる問題についてもう少し懸念があります。ご意見をお聞かせください。 –

0

いいえ、ジャックは、巻き込まれた自己参照の特別な場合を除いて、循環インスタンスを追跡しません。提案されているように、これを処理する現在の最良の方法は、親子スタイルの参照がある場合に少なくとも注釈を使用することです。

+0

ありがとうございます。 JSONに巨大で複雑なJavaオブジェクトを変換するためにJacksonを使用していますが、問題なく動作していますが、オブジェクトのサイズが大きいために問題が発生する可能性があります。私たちのプロジェクトにとって非常に重要です。ご意見をお聞かせください。 –

+0

ジャクソンはツリーモデル(JsonNode)を使用している場合にのみ完全なドキュメントデータを含んでいます。それ以外の場合は操作がインクリメンタルなので、メモリ使用量は問題にはなりません。しかし、重複が心配されているように思えます。もしこれが本当に問題であれば、Jackson 2.0を待たなければならないかもしれません。アイデンティティを持った任意の参照を扱うことをサポートします。 – StaxMan

+0

ジャパンは、価値あることとして、サイクルや複製を排除する完全サポートを提供しています。詳細については、@ JsonIdentityInfoアノテーションのjavadocsを参照してください。 – StaxMan

関連する問題