第一種情況:
第二種情況:
首先看看你的JSONObject或JSONArray的引用有沒有Getter()和Setter()方法,這個必須要加上
問題:
兩張表雙向多對一、一對多時。響應給后台使,出現此錯誤
分析: 雙向關系,生成json的時候是相互調用,需要有一方忽略對方
要完成的功能時,一方能夠找到多方,多方反過來又能找到一方。所以響應給前台時F12-查看網絡-找到post請求,然后分別查看參數和響應會發現,參數沒有問題,而響應就會報以上錯誤。點擊json數據進去查看就會發現很多數據,響應進入了死循環。(一方找多方,找了很多,然后反過來多方又去找一方找了很多,最后又循環去找)
解決:
在雙向的兩方的其中任何一方關聯字段上配置@JsonIgnore這個配置就可以了。
實例說明:
單據是組合關系。也就是所謂的強聚合。(雙向的一對多、多對一)。
兩者都不能拋棄另一方。所以要配置最強的級聯(cascade = CascadeType.ALL),還要有孤兒刪除(orphanRemoval = true)。還有:由於一對多性能差,所以一方要放棄維護關系,讓多方維護(mappedBy = “一方的字段”)
實例
//采購明細和采購單多對一關系
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "bill_id")//表中的采購單外鍵
@JsonIgnore //生成json的時候忽略這個屬性
private Purchasebill billId;
單據采購明細:
// 一般組合關系使用List (采購單和采購明細單是組合關系:雙向多對一,一對多)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "billId", fetch = FetchType.LAZY, orphanRemoval = true)
private List<Purchasebillitem> items = new ArrayList<Purchasebillitem>();