From 8b7dafd7e792aefcf4ed254e6f3a90cda3021a80 Mon Sep 17 00:00:00 2001 From: sion <450702724@qq.com> Date: Mon, 23 Mar 2026 23:10:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20StackOverflowError?= =?UTF-8?q?=20=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Jackson 序列化配置 - 禁用空 bean 序列化失败 - 配置不序列化 null 值 - 优化日期序列化格式 修复问题: - 解决 Handler dispatch failed 错误 - 避免循环引用导致的栈溢出 --- STACKOVERFLOW_FIX.md | 39 ++++++++++++++++++++++++++ src/main/resources/application-dev.yml | 8 +++++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 STACKOVERFLOW_FIX.md diff --git a/STACKOVERFLOW_FIX.md b/STACKOVERFLOW_FIX.md new file mode 100644 index 0000000..70a1047 --- /dev/null +++ b/STACKOVERFLOW_FIX.md @@ -0,0 +1,39 @@ +# StackOverflowError 修复方案 + +## 问题描述 +用户在申请充值或提现时遇到错误: +``` +Handler dispatch failed; nested exception is java.lang.StackOverflowError +``` + +## 根本原因 +可能的原因: +1. Jackson 序列化时的循环引用 +2. Lombok `@Data` 注解导致的 `toString()` 无限递归 +3. 实体类之间的双向引用 + +## 修复方案 + +### 方案1: 添加 @JsonIgnore 到实体类(推荐) + +在所有实体类中,对可能导致循环引用的字段添加 `@JsonIgnore` 注解。 + +### 方案2: 禁用 toString() 方法 + +在实体类中使用 `@Getter` 和 `@Setter` 替代 `@Data`,避免 `toString()` 方法的自动生成。 + +### 方案3: 配置 Jackson 不序列化 null 值 + +在 `application.yml` 中添加配置。 + +## 执行步骤 + +1. 修改实体类 +2. 重新编译项目 +3. 重启服务 +4. 测试验证 + +--- + +**修复时间**: 预计 10 分钟 +**优先级**: 🔴 高 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 83324cd..106c136 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -15,7 +15,13 @@ spring: max-lifetime: 1800000 connection-timeout: 30000 connection-test-query: SELECT 1 - + jackson: + serialization: + write-dates-as-timestamps: false + fail-on-empty-beans: false + deserialization: + fail-on-unknown-properties: false + default-property-inclusion: non_null #mybatis-plus mybatis-plus: