如何解决通过 POST 请求发送 JSON 数据时 FastAPI 的 422 错误
422 无法处理实体错误通常发生在请求的负载在语法上时正确,但与服务器的期望不符。在这种特定情况下,您遇到此错误是因为您的请求正在尝试将 JSON 数据发送到预期接收数据作为查询参数的端点。
要解决此问题,有多种方法 可用:
选项 1:利用 Pydantic模型
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
选项 2:使用主体参数
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
选项 3:使用字典类型
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
选项 4:直接访问请求正文
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
测试选项
使用Python“请求”库:
import requests url = 'http://127.0.0.1:8000/' payload = {'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
使用 JavaScript 的 Fetch API:
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({'user': 'foo'}) }).then(resp => resp.json()) .then(data => { console.log(data); }) .catch(error => { console.error(error); });
通过选择并实现其中一种方法,您可以成功处理 JSON 数据您的 FastAPI 端点,解决了 422 错误。
以上是如何修复 FastAPI 在 POSTing JSON 数据时出现的 422 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!