我正在尝试使用 Jackson 为我们的核心组件构建 rest 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 它需要更改更多类,而不仅仅是注释基类,而且我不确定如果我有多个从该对象模型继承的类,它将如何工作。