4

私の Spring MVC アプリケーションには、Content、Category、および Document の 3 つのクラスがあり、これらはすべて相互に関連しており、JSON にシリアル化する必要がありますが、そうすると無限ループが発生します。関係は次のとおりです。

Content -> List<Category> -> List<Document> -> List<Content> -> (etc.)

ここで、Category は Content などのプロパティです。参照が List で終了するように (content.categories.documents がビューに公開されるように) シリアル化しようとしていますが、それを行う方法が見つかりません。Jackson の @JsonManagedReference および @JsonBackReference によるアノテーションは機能しません。これらのフィールドの一部は、他の関係に対してすでにアノテーションが付けられているためです。関連するビューに固有のモデルを構築する以外に、これについてどうすればよいかわかりません。

編集:これが役立つ場合、私が得たエラーは「org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)」で、その後に参照チェーンのトレースが続きます。

4

4 に答える 4

1

おそらく、@JsonIdentityInfo循環依存関係の処理に使用できる注釈を見てください (このエントリで言及されています)。s (悲しいかな) では機能しませんCollectionが、コレクション、配列、およびマップに含まれる POJO では機能します。

于 2013-07-11T00:16:41.217 に答える
0

コンバーターは試しましたか?

他の 2 つのクラスのコンバーターを使用して、各クラスを個別にシリアル化します。たとえば、Content をシリアル化する場合、Category と Document のコンバーターを記述します。Converts は、Category および Document の識別子にすることができます。逆シリアル化に関しては、最初にオブジェクトを取得し、それらの関係を覚えておいてください。次に、識別子を使用して関係を再構築します。

于 2013-07-10T21:38:28.433 に答える