后台傳給前端字符串為null或解析JSON字符錯誤——SyntaxError: JSON.parse: unterminated string literal at line 1 column 9018638 of the JSON data


第一種情況:

第二種情況:

 首先看看你的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>();
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM