ホームページ  >  記事  >  DTO シリアル化中の Spring Boot アプリケーションでの StackOverflowError の問題

DTO シリアル化中の Spring Boot アプリケーションでの StackOverflowError の問題

王林
王林転載
2024-02-05 23:06:04625ブラウズ
質問内容

自己参照関係を使用して dto クラス (nodeattributesdto) をシリアル化しようとすると、スプリング ブート アプリケーションで stackoverflowerror が発生します。 dto クラスの tostring メソッドの実行中にエラーが発生します。

nodeattributes.java:

リーリー

nodeattributesdto.java:

リーリー

ポストマッピングリクエストテキスト:

リーリー ###間違い:### リーリー ###質問:###

シリアル化中のスタックオーバーフローエラーを回避するために、nodeattributesdto クラスの tostring メソッドを変更するにはどうすればよいですか?

dtos で自己参照関係を扱うときに考慮すべき特定のジャクソン アノテーションまたは構成はありますか?
  1. ###環境: スプリングブートバージョン: 2.7.2 Java バージョン: 17 データベース: postgresql
  2. ###私はもう試した: ###
  3. さまざまなジャクソンアノテーション (@jsonmanagedreference、@jsonbackreference)

正解
  • あなたが混乱しているのは、toString が Spring Boot のマーシャリングを制御しないということだと思います。
System.err.println() を介してこのオブジェクトを標準エラーに記録する場合は、toString を使用します。

あなたの toString は本質的にデータの再帰ダンプになろうとしているように見えますが、それは正しくありません。基本的な Java/CS だと思います。


toString では、現在のノードのデータを出力し、すべての子ノードで toString(delagate) を呼び出すことができます。これはできるはずです。 「ツリー」の最上部から開始するため、一般に(toStringの)後方参照は必要ないと思います。

マーシャラーはオブジェクトを検査し、リフレクションを使用してシリアル化された表現を構成します。お気づきのとおり、これは特定の注釈を尊重します。たとえば、@JsonIgnore。

参照:

JSON でフィールド応答を無視するにはどうすればよいですか?

ここにはたくさんの有益な情報があります:

https://www.php.cn/link/ffe4a40fecc90fa1120088e704712fb2

コード生成ツール (jhipster など) の外部で単純な Web サービスを作成して、舞台裏で何が起こっているかを理解し、生成をより適切に制御することも役立つ場合があります。

以上がDTO シリアル化中の Spring Boot アプリケーションでの StackOverflowError の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。