Isu StackOverflowError dalam aplikasi Spring Boot semasa siri DTO
Saya mendapat stackoverflowerror dalam aplikasi but spring apabila saya cuba mensiri kelas dto (nodeattributesdto) dengan hubungan rujukan kendiri. Ralat berlaku semasa pelaksanaan kaedah tostring dalam kelas dto.
nodeattributes.java:
// relevant parts of nodeattributes.java @onetomany(mappedby = "parent") @cache(usage = cacheconcurrencystrategy.read_write) @jsonignoreproperties(value = { "children", "parent", "node" }, allowsetters = true) private set<nodeattributes> children ; @manytoone @jsonignoreproperties(value = { "children", "parent", "node" }, allowsetters = true) private nodeattributes parent; // other fields, getters, setters, etc.
nodeattributesdto.java:
// relevant parts of nodeattributesdto.java private set<nodeattributesdto> children; private nodeattributesdto parent; // getters, setters, and other methods... @override public string tostring() { return "nodeattributesdto{" + "id=" + getid() + // other fields... ", parent=" + getparent() + ", children=" + getchildren() + ", node=" + getnode() + "}"; }
teks permintaan pemetaan pos:
{ // some other fields... "children": [ { "key": "attribute412w", "value": "value3", "valuetype": "integer", "type": "response", "required": false, "enabled": true, "node": { "id": 26030 } } ], // other fields... }
Ralat:
{ "type": "https://www.jhipster.tech/problem/problem-with-message", "title": "Internal Server Error", "status": 500, "detail": "Handler dispatch failed; nested exception is java.lang.StackOverflowError", "path": "/api/node-attributes", "message": "error.http.500" }
Soalan:
- Bagaimana untuk mengubah suai kaedah tostring dalam nodeattributesto class untuk mengelakkan stackoverflowerror semasa bersiri?
- Adakah terdapat sebarang anotasi atau konfigurasi jackson khusus yang perlu saya pertimbangkan semasa berurusan dengan perhubungan rujukan kendiri dalam dtos?
Persekitaran: Versi but musim bunga: 2.7.2 versi java: 17 Pangkalan data: postgresql
Saya dah cuba:
- Anotasi jackson yang berbeza (@jsonmanagedreference, @jsonbackreference)
Jawapan betul
Saya percaya kekeliruan anda ialah toString tidak mengawal marshalling dalam Spring Boot.
Jika anda ingin log objek ini ke ralat standard melalui System.err.println(), ia akan menggunakan toString.
Nampaknya toString anda pada asasnya cuba menjadi longgokan data secara rekursif, tetapi itu tidak betul. Saya fikir ia hanya Java/CS asas.
Dalam toString, anda hanya boleh mencetak data nod semasa dan kemudian memanggil toString(delegate) pada semua nod anak. Ia sepatutnya boleh melakukan ini. Saya fikir secara umum anda tidak memerlukan rujukan belakang (untuk toString) kerana anda akan bermula dari bahagian atas "pokok".
Marshaller memeriksa objek dan menggunakan pantulan untuk menyusun perwakilan bersiri. Seperti yang anda perhatikan, ia akan menghormati anotasi tertentu. Contohnya @JsonIgnore.
Lihat: Bagaimana untuk mengabaikan respons medan dalam json?
Terdapat banyak maklumat bagus di sini: https://www.php.cn/link/ffe4a40fecc90fa1120088e704712fb2
Ia juga mungkin membantu untuk membuat perkhidmatan web ringkas di luar alat penjanaan kod (seperti jhipster) untuk memahami perkara yang berlaku di sebalik tabir dan dengan itu mempunyai kawalan yang lebih baik ke atas penjanaan.
Atas ialah kandungan terperinci Isu StackOverflowError dalam aplikasi Spring Boot semasa siri DTO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Ya, pengeluaran halaman H5 adalah kaedah pelaksanaan penting untuk pembangunan front-end, yang melibatkan teknologi teras seperti HTML, CSS dan JavaScript. Pemaju membina halaman H5 yang dinamik dan berkuasa dengan bijak menggabungkan teknologi ini, seperti menggunakan & lt; kanvas & gt; Tag untuk menarik grafik atau menggunakan JavaScript untuk mengawal tingkah laku interaksi.

Kaedah penyesuaian simbol saiz semula dalam CSS bersatu dengan warna latar belakang. Dalam perkembangan harian, kita sering menghadapi situasi di mana kita perlu menyesuaikan butiran antara muka pengguna, seperti menyesuaikan ...

Mengenai sebab-sebab dan penyelesaian untuk memaparkan unsur-unsur blok sebaris. Apabila menulis susun atur laman web, kami sering menghadapi masalah paparan yang kelihatan aneh. Bandingkan ...

Bagaimana untuk mencapai kesan lengkung 45 darjah segmen? Dalam proses melaksanakan segmen, bagaimana membuat sempadan yang betul berubah menjadi lengkung 45 darjah ketika mengklik butang kiri, dan titik ...

Cara menggunakan JavaScript atau CSS untuk mengawal bahagian atas dan akhir halaman dalam tetapan percetakan penyemak imbas. Dalam tetapan percetakan penyemak imbas, ada pilihan untuk mengawal sama ada paparan ...

Harga USD Bitcoin masa nyata Faktor yang menjejaskan harga bitcoin Petunjuk untuk meramalkan harga bitcoin masa depan Berikut adalah beberapa maklumat penting mengenai harga Bitcoin pada 2018-2024:

Petua untuk melaksanakan kesan segmen dalam reka bentuk antara muka pengguna, Segmenter adalah elemen navigasi biasa, terutamanya dalam aplikasi mudah alih dan laman web responsif. …

Isu keserasian limpahan berbilang baris pada terminal mudah alih yang ditinggalkan pada peranti yang berbeza apabila membangunkan aplikasi mudah alih menggunakan Vue 2.0, anda sering menghadapi keperluan untuk melimpah teks ...