根因: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>
1.8 KiB
1.8 KiB
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 行注解),不影响现有业务逻辑。
验证计划
- 修改后运行 Maven 编译确认无语法错误
- 部署后按 Bug 步骤操作:新增手术安排 → 查找并选择手术申请 → 填写入室时间 → 保存
- 确认保存成功,无报错