症状
客户端提交看似合法的数据却收到 HTTP 422 Unprocessable Entity。响应 JSON 中的 detail 数组每项包含位置、消息与类型标识。由于校验发生在端点函数之前,应用日志不会出现任何记录,容易让期待服务器错误的人困惑。
诊断
读取 detail 中 loc/msg/type 定位问题字段;用 curl 带正确的 Content-Type 复现,区分客户端与模型问题;再检查 Pydantic 模型上的 Field 约束。
curl -i -X POST http://localhost:8000/items -H "Content-Type: application/json" -d '{}'
根因
FastAPI 在执行处理器前会依据 Pydantic 模型校验请求,422 表示解析后的数据未通过类型或约束检查,请求从未进入端点代码。
修复
让客户端负载对齐模型:补齐缺失字段、修正类型并发送正确的 Content-Type;若契约本身有误,则调整模型与约束,而不是盲目放松校验。
验证
重发请求确认返回 2xx 与预期内容,并补充一个提交代表性负载的自动化测试,让后续模型变更以测试失败而非线上 422 暴露。
常见陷阱
把校验错误当作服务器崩溃去排查日志会浪费时间;422 是契约不匹配,应从请求结构与模型定义两侧核对。