FastAPI中POST请求传递单个JSON体参数出现字段缺失错误的排查
问题原因与解决方案
这个问题是FastAPI参数解析规则的典型场景:当你在路径操作函数中直接定义process_id: int时,FastAPI默认会将其识别为查询参数(Query Parameter),但你的测试代码是把参数放在JSON请求体里发送的,因此接口会判定查询参数中缺少process_id,从而返回缺失字段的错误。
下面提供两种可行的解决方案,都能让你的POST接口正确接收JSON请求体中的参数:
方案1:使用Pydantic模型定义请求体(推荐)
这是FastAPI处理请求体的标准方式,尤其适合后续可能增加参数的场景:
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() # 定义请求体的模型结构 class ProcessRequest(BaseModel): process_id: int @app.post("/do_something/") async def do_something(request: ProcessRequest): # 通过request对象获取请求体中的参数 return {"process_id": request.process_id}
方案2:用Body显式标记单个参数
如果你的接口确实只需要这一个参数,也可以直接用Body类标记参数,告诉FastAPI从请求体中解析它:
from fastapi import FastAPI, Body app = FastAPI() @app.post("/do_something/") async def do_something(process_id: int = Body(...)): return {"process_id": process_id}
测试代码无需修改
你的test_main.py代码是正确的,修改完接口代码后再运行测试,就能得到预期的返回结果:
{'process_id': 16}
内容的提问来源于stack exchange,提问作者LJG




