在寫學期管理的獲取時,寫的服務測試以後沒有什麼問題,卻在測試控制器時出現了問題。控制檯報了一大堆錯誤。node
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.mengyunzhi.schedule.entity.Semester["schedules"]->org.hibernate.collection.internal.PersistentBag[0]->com.mengyunzhi.schedule.entity.Schedu
主要的錯就是這個,他說不能序列化json,棧溢出了,是semester["schedules"]不能序列化。web
在Semester表中的schedules屬性是一個一對多的屬性,猜測多是數據太多了,致使不能序列化spring
但在後來測試時把semester裏的schedules集合僅僅保存一個對象,再進行測試,仍是報了這個錯。
打斷點debug,在經歷種種尋找後找到了這個。
json
我發如今查詢semester裏邊有schedules,但schedules裏的每一個元素裏邊都有一個semester的對象,而且這個semester的對象跟你要查詢的對象仍是相同的關係,這樣就形成了死循環。app
問組長解決辦法,組長說能夠經過註解在對象序列化爲json對象時忽視對象的屬性,百度了一下有個@jsonignore的註解,他能夠在json序列化時跳過某個屬性,大體看了一下,但是使用@jsonignore就固定了對象的json序列化,我想的時根據個人需求不一樣來序列化不一樣的屬性,而後找到了一個@jsonView的註解。測試
網上參考了一下,首先就是在你要定義一個接口,再把要序列化的屬性前面加上@jsonView的註解,並標識屬於的接口名稱spa
以後在控制器中使用jsonView(類名.接口名.class)就好了.net
結果返回的數據就對了。hibernate
Body = [{"id":159,"endTime":"1539273600000","name":"ceshi3","startTime":"1538668800000","status":true,"schedules":[{"id":6408,"node":1,"week":1,"weekOrder":1},{"id":6409,"node":2,"week":1,"weekOrder":1},{"id":6410,"node":3,"week":1,"weekOrder":1}]}]
同時也能夠繼承你定義的接口。
參考連接:https://blog.csdn.net/u012373...debug