根因:OpCreateScheduleDto缺少@JsonIgnoreProperties注解,Jackson默认 FAIL_ON_UNKNOWN_PROPERTIES=true,前端提交的表单包含DTO中不存在的字段 (identifierNo、patientName、gender、age、birthDay等)导致反序列化失败 修复:在OpCreateScheduleDto类上添加@JsonIgnoreProperties(ignoreUnknown = true) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
# Bug #432 分析报告
|
||
|
||
## 根因分析
|
||
|
||
**根因**:后端 `OpCreateScheduleDto` 缺少 `@JsonIgnoreProperties(ignoreUnknown = true)` 注解。
|
||
|
||
Spring Boot 的 Jackson 默认配置 `FAIL_ON_UNKNOWN_PROPERTIES = true`,即反序列化时遇到 DTO 中不存在的字段会抛出 `JsonMappingException: Unrecognized field` 异常。
|
||
|
||
前端 `submitForm()` 使用 `{ ...form }` 展开整个表单对象提交,包含大量 DTO 中不存在的字段:
|
||
- `identifierNo`(就诊卡号)
|
||
- `patientName`(患者姓名)
|
||
- `gender`(性别)
|
||
- `age`(年龄)
|
||
- `birthDay`(出生日期)
|
||
- `orgName`(机构名称)
|
||
- `applyDeptName`(申请科室名称)
|
||
- `surgeonName`(主刀医生姓名)
|
||
- `applyDoctorName`(申请医生姓名)
|
||
- `applyTime`(申请时间)
|
||
- `surgeryNo`(手术单号)
|
||
- `scheduleId`(排程ID,新增时为undefined)
|
||
- `orgId`(机构ID,前端显式添加)
|
||
|
||
这些字段在后端 `OpCreateScheduleDto` 中均未定义,导致 JSON 反序列化失败,返回 400/500 错误,前端显示"新增手术安排失败"。
|
||
|
||
## 影响范围
|
||
|
||
- **后端文件**:`OpCreateScheduleDto.java`
|
||
- **影响接口**:`POST /clinical-manage/surgery-schedule/create`(新增手术安排)
|
||
- **影响数据表**:`op_schedule`
|
||
- **前端无需修改**:前端提交逻辑正确,问题在后端 DTO 配置
|
||
|
||
## 修复方案
|
||
|
||
在 `OpCreateScheduleDto` 类上添加 `@JsonIgnoreProperties(ignoreUnknown = true)` 注解,使 Jackson 在反序列化时忽略 DTO 中不存在的字段。
|
||
|
||
这是最小侵入性修复(仅添加 1 行注解),不影响现有业务逻辑。
|
||
|
||
## 验证计划
|
||
|
||
1. 修改后运行 Maven 编译确认无语法错误
|
||
2. 部署后按 Bug 步骤操作:新增手术安排 → 查找并选择手术申请 → 填写入室时间 → 保存
|
||
3. 确认保存成功,无报错
|