diff --git a/STACKOVERFLOW_FIX_REPORT.md b/STACKOVERFLOW_FIX_REPORT.md new file mode 100644 index 0000000..606b543 --- /dev/null +++ b/STACKOVERFLOW_FIX_REPORT.md @@ -0,0 +1,206 @@ +# 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 分钟 +**状态**: ✅ 修复完成,等待部署