# 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. 确认保存成功,无报错