1. 程式人生 > >解決json序列化有多對一和多對多關係的物件時造成死迴圈的問題

解決json序列化有多對一和多對多關係的物件時造成死迴圈的問題

json序列化的物件中存在雙向引用會導致的無限遞迴(infinite recursion)問題。
使用@JsonBackReference標記在有多對一或者多對多關係的屬性上即可解決這個問題,舉例:
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "market_id")
private Market market;
ps:
@JsonManagedReference:標記的屬性會被序列化,序列化時屬性預設都是會被序列化的。反序列(deserialization,即json資料轉換為物件)時,如果沒有@JsonManagedReference,則不會自動注入@JsonBackReference標註的屬性。
@JsonIgnore:直接忽略某個屬性,以斷開無限遞迴,序列化或反序列化均忽略。當然如果標註在get、set方法中,則可以分開控制,序列化對應的是get方法,反序列化對應的是set方法。在父子關係中,當反序列化時,@JsonIgnore不會自動注入被忽略的屬性值(父或子),這是它跟@JsonBackReference和@JsonManagedReference最大的區別。