← 中文资源

简体中文版本

FastAPI 请求返回 422 Unprocessable Entity

阅读 FastAPI 的 422 校验错误响应,定位是哪个字段与规则拒绝了请求体。

阅读英文原文

症状

客户端提交看似合法的数据却收到 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 是契约不匹配,应从请求结构与模型定义两侧核对。