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