fix(bug): 修复诊疗目录 SysDictData 反序列化错误

根因: commit 68cfa4882 将 Jackson 配置从 Jackson2ObjectMapperBuilderCustomizer
改为直接定义 ObjectMapper bean,导致 Spring Boot 自动配置失效。

修复: 改回 Jackson2ObjectMapperBuilderCustomizer,保留 Spring Boot 默认设置。

同时提交分析报告到 MD/bugs/
This commit is contained in:
2026-06-11 17:30:30 +08:00
parent 1f738c969a
commit babd8d0c04
11 changed files with 103 additions and 41 deletions

View File

@@ -0,0 +1,43 @@
# 诊疗目录 SysDictData 反序列化错误 诸葛亮分析报告
> **文档类型**: Bug分析
> **分析时间**: 2026-06-11
> **分析模型**: mimo-v2.5 (LLM深度分析)
---
## 基本信息
- **标题**: 诊疗目录 /system/catalog/diagnosistreatment 进入报错
- **错误**: Cannot deserialize value of type SysDictData from Array value
- **模块**: 诊疗目录管理
---
## 根因分析
**根本原因**: commit `68cfa4882` 将 Jackson 配置从 `Jackson2ObjectMapperBuilderCustomizer` 改为直接定义 `ObjectMapper` bean。
直接定义 `ObjectMapper` bean 会导致 Spring Boot 的 Jackson 自动配置完全失效:
1. Spring Boot 默认的 Jackson 模块(如 `jackson-datatype-jdk8``jackson-datatype-jsr310`)不会自动注册
2. 默认的序列化/反序列化特性设置丢失
3. `ObjectMapper` 的默认可见性设置可能不同
`DictAspect` 处理 `@Dict` 注解的 DTO 时Jackson 在序列化/反序列化过程中遇到 `SysDictData` 类型,由于缺少正确的模块配置,无法正确处理嵌套的数组/对象结构。
## 修复方案
`ApplicationConfig.java` 中的 `ObjectMapper` bean 改回 `Jackson2ObjectMapperBuilderCustomizer`,让 Spring Boot 自动配置保持生效。
### 修改文件
- `core-framework/src/main/java/com/core/framework/config/ApplicationConfig.java`
### 修改内容
- `public ObjectMapper objectMapper()``public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()`
- 移除手动创建的 `ObjectMapper` 实例
- 使用 builder 模式配置,保留 Spring Boot 默认设置
---
## 路由决策
- **修复 Agent**: guanyu (后端)
- **原因**: Jackson 配置问题,纯后端修改