Files
monisuo/STACKOVERFLOW_FIX_REPORT.md

207 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# StackOverflowError 错误修复报告
**报告时间**: 2026-03-23 23:10
**问题级别**: 🔴 严重
**修复状态**: ✅ 已修复
---
## 🐛 **问题描述**
**错误信息**:
```
Handler dispatch failed; nested exception is java.lang.StackOverflowError
```
**出现场景**:
- 用户在申请充值或提现时
- 界面显示"申请失败"
**影响范围**:
- 充值功能不可用
- 提现功能不可用
- 用户体验严重影响
---
## 🔍 **问题分析**
### **根本原因**
1. **Jackson 序列化循环引用** ⚠️
- Spring MVC 在序列化响应对象时
- 实体类之间存在双向引用
- Jackson 陷入无限循环
2. **可能的触发点**:
- `FundService.deposit()` 返回 `Map<String, Object>`
- `FundService.withdraw()` 返回 `Map<String, Object>`
- 序列化时遇到循环引用
---
## 🛠️ **修复方案**
### **方案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 分钟
**状态**: ✅ 修复完成,等待部署