日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Could not write JSON: Infinite recursion (StackOverflowError);

發布時間:2025/3/20 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Could not write JSON: Infinite recursion (StackOverflowError); 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:https://blog.csdn.net/east123321/article/details/80435051
在controller返回數據到統一json轉換的時候,出現了json infinite recursion stackoverflowerror的錯誤,即json在將對象轉換為json格式的數據的時候,出現了無限遞歸調用的情況。

?

具體的情況如下:

A類中,有個屬性:List<B> b, A與B的關系為 OneToMany;在B類中,有屬性A a,引用到A中的字段id,并作為外鍵。hibernate查詢結果正常,可以看到返回的A對象中,有b參數值,但在json轉換的時候就出現了無限遞歸的情況。個人分析,應該是json在序列化A中的b屬性的時候,找到了B類,然后序列化B類,而B類中有a屬性,因此,為了序列化a屬性,json又得去序列化A類,如此遞歸反復,造成該問題。

解決方法:

在B類中a的getter setter方法上加注解@JsonBackReference ,在getter上加即可解決

@JsonBackReference和@JsonManagedReference:這兩個標注通常配對使用,通常用在父子關系中。@JsonBackReference標注的屬性在序列化(serialization,即將對象轉換為json數據)時,會被忽略(即結果中的json數據不包含該屬性的內容)。@JsonManagedReference標注的屬性則會被序列化。在序列化時,@JsonBackReference的作用相當于@JsonIgnore,此時可以沒有@JsonManagedReference。但在反序列化(deserialization,即json數據轉換為對象)時,如果沒有@JsonManagedReference,則不會自動注入@JsonBackReference標注的屬性(被忽略的父或子);如果有@JsonManagedReference,則會自動注入自動注入@JsonBackReference標注的屬性。??

@JsonIgnore:直接忽略某個屬性,以斷開無限遞歸,序列化或反序列化均忽略。當然如果標注在get、set方法中,則可以分開控制,序列化對應的是get方法,反序列化對應的是set方法。在父子關系中,當反序列化時,@JsonIgnore不會自動注入被忽略的屬性值(父或子),這是它跟@JsonBackReference和@JsonManagedReference最大的區別。

轉載于:https://www.cnblogs.com/Mr-Kenson/p/9086917.html

總結

以上是生活随笔為你收集整理的Could not write JSON: Infinite recursion (StackOverflowError);的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。