天天看點

Jackson序列化對象時無限遞歸錯誤Infinite recursion的解決辦法

最近在項目中,實作對象的序列化和反序列化時用到了Jackson,但是在junit單元測試的時候卻出現了如下錯誤:

org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError),

根據錯誤提示中的infinite recursion知道是無線遞歸錯誤導緻了堆棧溢出,查找代碼後發現,由于代碼中訂單實體類Order内包含了訂單詳情OrderDetail的對象集合List<OrderDetail>,而OrderDetail内也含有訂單Order對象,是以訂單和訂單詳情是一對多雙向關聯的關系,在Jackson序列化List<OrderDetail>屬性時會無循環下去,導緻stackoverflow。解決辦法:

1. 在實體類上加入注釋 @JsonIgnoreProperties(value={""}),value内為要忽略的屬性集

2. 在屬性或方法上加入注釋@JsonIgnore

再次運作程式,測試通過。

在對象的序列化上選擇自己需要的屬性就可,對于不需要的屬性就可以通過加入注解的方式忽略