jackson - 处理杰克逊双向引用的最佳方式
问题描述
我正在尝试使用 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 它需要更改更多类,而不仅仅是注释基类,而且我不确定如果我有多个从该对象模型继承的类,它将如何工作。
解决方案
推荐阅读
- azure - Synapse 管道 - 从本地复制数据 - 读取整个数据库
- python - 如何在 Python 中为另一个文件夹运行具有嵌套函数的函数
- python-3.x - 无法在opensuse linux中安装python3
- react-native - 用于大屏幕的 React Native Paper Chip
- database - ORACLE 存储过程接受日期范围作为输入参数
- rust - 如何使用 Arc 进行运行时多态性
> 在锈? - react-native - 在 Github 上向公众公开 React-Native Expo 应用程序
- jenkins - 詹金斯收敛 valgrind 失败
- ios - 用音频录制 Xcode 模拟器的视频?
- android - 安装 Flutter 时接受 Android 许可证失败