DTO 序列化期间 Spring Boot 应用程序中出现 StackOverflowError 问题
当我尝试序列化具有自引用关系的 dto 类 (nodeattributesdto) 时,我在 spring boot 应用程序中遇到 stackoverflowerror。该错误发生在执行dto类中的tostring方法期间。
nodeattributes.java:
// relevant parts of nodeattributes.java @onetomany(mappedby = "parent") @cache(usage = cacheconcurrencystrategy.read_write) @jsonignoreproperties(value = { "children", "parent", "node" }, allowsetters = true) private set<nodeattributes> children ; @manytoone @jsonignoreproperties(value = { "children", "parent", "node" }, allowsetters = true) private nodeattributes parent; // other fields, getters, setters, etc.
nodeattributesdto.java:
// relevant parts of nodeattributesdto.java private set<nodeattributesdto> children; private nodeattributesdto parent; // getters, setters, and other methods... @override public string tostring() { return "nodeattributesdto{" + "id=" + getid() + // other fields... ", parent=" + getparent() + ", children=" + getchildren() + ", node=" + getnode() + "}"; }
postmapping 请求正文:
{ // some other fields... "children": [ { "key": "attribute412w", "value": "value3", "valuetype": "integer", "type": "response", "required": false, "enabled": true, "node": { "id": 26030 } } ], // other fields... }
错误:
{ "type": "https://www.jhipster.tech/problem/problem-with-message", "title": "Internal Server Error", "status": 500, "detail": "Handler dispatch failed; nested exception is java.lang.StackOverflowError", "path": "/api/node-attributes", "message": "error.http.500" }
问题:
- 如何修改 nodeattributesdto 类中的 tostring 方法以避免序列化期间出现 stackoverflowerror?
- 在处理 dto 中的自引用关系时,我是否应该考虑特定的 jackson 注释或配置?
环境: 春季启动版本:2.7.2 java版本:17 数据库:postgresql
我已经尝试过:
- 不同的 jackson 注释(@jsonmanagedreference、@jsonbackreference)
正确答案
我相信您的困惑是 toString 不控制 Spring Boot 中的编组。
如果您要通过 System.err.println() 记录该对象以表示标准错误,它将使用该 toString。
似乎您的 toString 本质上是试图成为数据的递归转储,但并不正确。我认为这只是基本的 Java/CS。
在toString中,您可以只打印当前节点的数据,然后对所有子节点调用toString(delagate)。应该可以做到这一点。我认为一般情况下您不需要反向引用(对于 toString),因为您将从“树”的顶部开始。
编组器检查对象并使用反射来组成序列化表示。正如您所注意到的,它将遵守某些注释。例如@JsonIgnore。
这里有很多好信息:https://www.php.cn/link/ffe4a40fecc90fa1120088e704712fb2
它还可能有助于在代码生成工具(如 jhipster)之外创建一个简单的 Web 服务,以了解幕后发生的情况,从而更好地控制生成。
以上是DTO 序列化期间 Spring Boot 应用程序中出现 StackOverflowError 问题的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

自 2009 年问世以来,比特币成为加密货币界的领头羊,其价格经历了巨大的波动。为了提供全面的历史概述,本文汇集了从 2009 年到 2025 年的比特币价格数据,涵盖了重大的市场事件、市场情绪变化和影响价格走势的重要因素。

比特币,作为一种加密货币,自问世以来经历了显着的市场波动。本文将提供比特币自诞生以来的历史价格总览,帮助读者了解其价格趋势和关键时刻。通过分析比特币的历史价格数据,我们可以了解市场对其价值评估、影响其波动的因素,并为未来投资决策提供依据。

比特币自 2009 年创世以来,价格经历多次大幅波动,最高涨至 2021 年 11 月的 69,044.77 美元,最低跌至 2018 年 12 月的 3,191.22 美元。截至 2024 年 12 月,最新价格突破 100,204 美元。

实时比特币美元价格 影响比特币价格的因素 预测比特币未来价格的指标 以下是 2018-2024 年比特币价格的一些关键信息:

CSS自定义resize符号的方法与背景色统一在日常开发中,我们经常会遇到需要自定义用户界面细节的情况,比如调...

如何实现分段器的45度曲线效果?在实现分段器的过程中,如何让点击左侧按钮时右侧边框变成45度曲线,而点�...

是的,H5页面制作是前端开发的重要实现方式,涉及HTML、CSS和JavaScript等核心技术。开发者通过巧妙结合这些技术,例如使用<canvas>标签绘制图形或使用JavaScript控制交互行为,构建出动态且功能强大的H5页面。