Files
his/bug432_analysis.md
关羽 013ddfab20 Fix Bug #432: 门诊手术安排:新增手术安排保存时报错 - 根因+修复方案
根因: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>
2026-05-16 14:18:41 +08:00

1.8 KiB
Raw Blame History

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