Spring、Hibernate を使用するプロジェクトがあり、JSON を返すコントローラーがあります。当然、私のモデルには JPA アノテーションを使用して休止状態の関係を定義するためのリストなどが含まれているため、たとえば、所有する一連のチャレンジを含むユーザーがあり、同様にチャレンジにはそれを所有するユーザーが含まれます。
残念ながら、JSON に埋め込まれたコレクションに多くの問題があるようです。
たとえば、その設定 (ユーザーがチャレンジを所有し、チャレンジには所有者がいる) では、問題なくチャレンジを返すことができます。User を問題なく返すことができます。しかし、チャレンジのリストを返そうとすると、すべてが爆発します! Jmeter テストから次のエラーが表示されます。
エラー 500 サーバー エラー
これは、Jackson json パーサーで json の設定に問題があったことを意味すると思います。@JsonIgnoreProperties({"challengesOwned"}) を使用すると、個々のチャレンジ オブジェクトにリストが埋め込まれなくなったため、チャレンジのリストを正常に返すことができるため、これを信じています。
これは私には非常に奇妙に思えます。Jackson は JSON 内の単純な埋め込みリストを本当にマップできないのでしょうか? また、ユーザーをキーとして使用するマップがあるため、大きな問題が発生しました...そして、JSONマップのキーを埋め込みオブジェクトとして定義することさえできないようです!
私の問題について誰か提案がありますか?一部の Json マッピングを手動で定義する必要がありますか? 私が知らない簡単な解決策はありますか?
編集:
j0ntech の言うことは真実のように見えますが、それがすべてではないことが判明しました。Spring が Jackson を使用して休止状態のエンティティの 1 つを JSON バージョンにシリアル化したとき、休止状態はそのエンティティのプロパティの 1 つを遅延ロードしようとしたようですが、エンティティはその時点でトランザクションの外部にあったため (コントローラの「内」) )、飲み込まれたばかりの例外が発生しました。
したがって、実際には2つの問題がありました。Jackson を手動で使用して、実際に返す前に返していたオブジェクトをシリアル化しようとすることで、これを理解しました。そうすれば、実際に他の問題のスタック トレースを取得できました。