FastAPI启动触发AssertionError:如何修复请求参数配置错误?
问题:FastAPI启动时AssertionError错误修复
错误信息
AssertionError: Param: nodes can only be a request body, using Body():
原始代码
from fastapi import FastAPI from fastapi.responses import JSONResponse from typing import List, Dict app = FastAPI(title="Neo4jAPI") @app.post("/create_nodes/") def post(nodes: List[Dict] | None = Header(default=None)): #Some Logic return JSONResponse(nodes)
修复方案
错误原因
nodes被声明为Header类型,但List[Dict]这类复杂结构化数据无法通过HTTP请求头传递——请求头仅支持字符串、数字这类简单类型。FastAPI检测到参数类型与传递方式不匹配,因此抛出断言错误,提示该参数应使用请求体(Body)接收。
修改后的代码
from fastapi import FastAPI, Body from fastapi.responses import JSONResponse from typing import List, Dict, Optional app = FastAPI(title="Neo4jAPI") @app.post("/create_nodes/") def post(nodes: Optional[List[Dict]] = Body(default=None)): # Some Logic return JSONResponse(nodes)
修改说明
- 新增导入
Body类,用于声明参数从请求体获取 - 将
Header(default=None)替换为Body(default=None),修正参数的传递方式 - 可选:用
Optional[List[Dict]]替代List[Dict] | None,提升对Python 3.9及以下版本的兼容性
额外说明
如果需要通过请求头传递数据,仅能使用字符串、数字等简单类型;复杂结构化数据的传递,优先使用请求体(适用于POST/PUT请求),若用查询参数传递复杂结构会导致URL过长且解析麻烦,不推荐。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

