首页 > 解决方案 > 处理杰克逊双向引用的最佳方式

问题描述

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

标签: jacksonjsonidentityinfoinfinite-recursion

解决方案


推荐阅读