返回 Bug 清单
BUG-0392project-13高已修复backend-logic
答题链路静默断裂:路径不匹配 + 事件总线零调用 + 前端仅 console + 404 被改写成 200
发现:2026-10-03验证:2026-10-27置信度:90%
症状
用户答题后无任何记录入库:answer_records 不增长、user_ability.ability_theta 不更新、学习报告数据为 0。前端无报错,接口返回 200 {'code':-1,'message':'系统繁忙'},从状态码到日志都看不出问题。
根因
四个独立缺陷叠加且互相掩盖:①前端 POST /api/answer 而后端只映射 /submit 与 /answer(类级 @RequestMapping 无双路径);②AnswerEventBus.publishAnswerEvent() 全仓 0 个调用者,答题事件从未发布;③前端 .catch() 只 console.log,失败对用户不可见;④NoResourceFoundException 被兜底 handler 改成 HTTP 200 + 业务错误码,使 404 伪装成 200。
修复方案
①@PostMapping({"", "/", "/submit", "/answer"}) 同时接受四种路径,并给类级 @RequestMapping({"/api/answer","/api/answers"});②在 AnswerService 注入 AnswerEventBus,用 TransactionSynchronization.afterCommit 在事务提交后发布(无事务时立即发布),失败只记日志不阻断主流程;③前端 submitAnswer 重试 2 次(300ms/1200ms)+ localStorage 队列兜底(上限 200)+ 页面待同步横幅,401/403/4004 不重试;④GlobalExceptionHandler 增加 @ExceptionHandler(NoResourceFoundException.class) @ResponseStatus(NOT_FOUND) 返回真正的 404,业务错误仍保留 HTTP 200 + code 以兼容前端。
错误签名
POST /api/answer 404 NoResourceFoundException 被 GlobalExceptionHandler 改写为 HTTP 200 code=-1 系统繁忙;answer_records 无新增;user_ability 不变技术信息
来源项目
project-13
涉及文件
backend/src/main/java/com/project-13/controller/AnswerController.java, backend/src/main/java/com/project-13/service/AnswerService.java, backend/src/main/java/com/project-13/service/AnswerEventHandler.java +3
标签
静默失败, 状态码伪装, 事件总线未接线, 多缺陷叠加, project-13...