我正在尝试使用杰克逊(Jackson)为我们的核心组件构建其余的API,但是某些对象遇到此异常时会遇到问题:
javax.ws.rs.ProcessingException:com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowError)
搜索后,我了解了几种解决方法。 例如 https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion
我使用了对我来说很好的@JsonIdentityInfo,但是问题是哪种方法更好?
在此帖子中: Infinite Recursion with Jackson JSON and Hibernate JPA issue
有人声称需要谨慎使用@JsonIdentityInfo,因为它可能会引起问题:
在这种情况下,您必须要小心,因为您可能需要多次读取对象的属性(例如,在一个产品列表中有多个共享同一卖方的产品),并且此注释会阻止您执行此操作所以。我建议始终查看Firebug日志以检查Json响应,并查看代码中发生了什么。
我也看到了这篇文章:http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html
@JsonIdentityInfo
我了解@JsonIdentityInfo是Jackson 2中的较新方法。
它的优点是需要最少的代码更改(只需将此注释放入有问题的对象模型中,而无需从另一端进行处理。
解释了一个缺点
@JsonIgnoreProperties 它需要更改更多类,而不仅仅是注释基类,而且我不确定如果从该对象模型继承多个类,它将如何工作。