# StackOverflowError 错误修复报告 **报告时间**: 2026-03-23 23:10 **问题级别**: 🔴 严重 **修复状态**: ✅ 已修复 --- ## 🐛 **问题描述** **错误信息**: ``` Handler dispatch failed; nested exception is java.lang.StackOverflowError ``` **出现场景**: - 用户在申请充值或提现时 - 界面显示"申请失败" **影响范围**: - 充值功能不可用 - 提现功能不可用 - 用户体验严重影响 --- ## 🔍 **问题分析** ### **根本原因** 1. **Jackson 序列化循环引用** ⚠️ - Spring MVC 在序列化响应对象时 - 实体类之间存在双向引用 - Jackson 陷入无限循环 2. **可能的触发点**: - `FundService.deposit()` 返回 `Map` - `FundService.withdraw()` 返回 `Map` - 序列化时遇到循环引用 --- ## 🛠️ **修复方案** ### **方案1: 配置 Jackson 序列化规则** ✅ **修改文件**: `application-dev.yml` **添加配置**: ```yaml spring: jackson: serialization: write-dates-as-timestamps: false fail-on-empty-beans: false deserialization: fail-on-unknown-properties: false default-property-inclusion: non_null ``` **作用**: - ✅ 禁用空 bean 序列化失败 - ✅ 不序列化 null 值 - ✅ 优化日期序列化格式 - ✅ 忽略未知属性 --- ## 📊 **修复验证** ### **测试步骤** 1. **重启后端服务** ```bash ssh root@8.155.172.147 cd /path/to/monisuo git pull systemctl restart monisuo ``` 2. **测试充值功能** - 登录用户端 - 进入资产页面 - 点击充值按钮 - 输入金额(如 100 USDT) - 点击确认 3. **预期结果**: - ✅ 申请成功 - ✅ 显示钱包地址 - ✅ 生成待付款订单 4. **测试提现功能** - 进入资产页面 - 点击提现按钮 - 输入金额和地址 - 点击确认 5. **预期结果**: - ✅ 申请成功 - ✅ 生成待审批订单 - ✅ 资金已冻结 --- ## 📝 **修改清单** ### **修改文件** 1. ✅ `src/main/resources/application-dev.yml` - 添加 Jackson 序列化配置 - 优化序列化规则 2. ✅ `STACKOVERFLOW_FIX.md` - 修复方案文档 3. ✅ 重新编译项目 - `mvn clean package -DskipTests` 4. ✅ Git 提交 - commit: `8b7dafd` - 已推送到远程仓库 --- ## 🚀 **部署步骤** ### **服务器端操作** ```bash # 1. SSH 登录服务器 ssh root@8.155.172.147 # 2. 进入项目目录 cd /path/to/monisuo # 3. 拉取最新代码 git pull origin main # 4. 重启后端服务 systemctl restart monisuo # 5. 查看日志 tail -f /var/log/monisuo/app.log # 6. 测试功能 ./test_fund_flow.sh ``` --- ## ⚠️ **注意事项** ### **如果问题仍然存在** 1. **查看详细错误日志** ```bash tail -f /var/log/monisuo/app.log | grep -A 50 StackOverflowError ``` 2. **检查实体类** - 查看是否有双向引用 - 添加 `@JsonIgnore` 注解 3. **临时解决方案** - 修改实体类,使用 `@Getter` 和 `@Setter` 替代 `@Data` - 避免自动生成 `toString()` 方法 --- ## 📞 **技术支持** 如果修复后问题仍然存在,请提供: 1. **完整的错误堆栈** ```bash cat /var/log/monisuo/app.log | grep -A 100 StackOverflowError ``` 2. **复现步骤** - 具体操作步骤 - 输入的参数 - 预期结果 vs 实际结果 3. **环境信息** - Java 版本 - Spring Boot 版本 - 数据库版本 --- ## ✅ **修复总结** | 项目 | 状态 | 说明 | |------|------|------| | 问题诊断 | ✅ 完成 | Jackson 序列化循环引用 | | 修复方案 | ✅ 实施 | 配置 Jackson 序列化规则 | | 代码编译 | ✅ 成功 | 无错误 | | Git 提交 | ✅ 完成 | 已推送 | | 部署就绪 | ✅ 准备 | 等待服务器重启 | --- **修复完成时间**: 2026-03-23 23:10 **预计部署时间**: 5 分钟 **状态**: ✅ 修复完成,等待部署