如何解決透過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中文網其他相關文章!