207 lines
3.9 KiB
Markdown
207 lines
3.9 KiB
Markdown
|
|
# 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 分钟
|
|||
|
|
**状态**: ✅ 修复完成,等待部署
|