You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动