Files
monisuo/STACKOVERFLOW_FIX_REPORT.md

3.9 KiB
Raw Blame History

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

添加配置:

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. 重启后端服务

    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
    • 已推送到远程仓库

🚀 部署步骤

服务器端操作

# 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. 查看详细错误日志

    tail -f /var/log/monisuo/app.log | grep -A 50 StackOverflowError
    
  2. 检查实体类

    • 查看是否有双向引用
    • 添加 @JsonIgnore 注解
  3. 临时解决方案

    • 修改实体类,使用 @Getter@Setter 替代 @Data
    • 避免自动生成 toString() 方法

📞 技术支持

如果修复后问题仍然存在,请提供:

  1. 完整的错误堆栈

    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 分钟 状态: 修复完成,等待部署