建置RESTful API 時,經常會遇到與資料交換相關的問題,尤其是涉及POST 請求時。其中一個問題是在嘗試傳送 JSON 資料時收到「422 Unprocessable Entity」錯誤。
在提供的程式碼範例中:
from fastapi import FastAPI app = FastAPI() @app.post("/") def main(user): return user
此程式碼定義了一個需要 JSON 的 POST 端點包含「使用者」金鑰的有效負載。但是,當 HTTP 用戶端傳送與預期格式不符的 JSON 資料時,就會發生錯誤。為了解決這個問題,有幾個選項:
Pydantic 模型提供了一種根據預定義模式驗證和反序列化JSON 負載的方法:
from pydantic import BaseModel class User(BaseModel): user: str @app.post("/") def main(user: User): return user
FastAPI中的Body參數可以讓你直接解析無需定義Pydantic 模型的JSON 負載:
from fastapi import Body @app.post("/") def main(user: str = Body(..., embed=True)): return {'user': user}
from typing import Dict, Any @app.post("/") def main(payload: Dict[Any, Any]): return payload
from fastapi import Request @app.post("/") async def main(request: Request): return await request.json()
您可以使用以下命令測試這些選項:
import requests url = 'http://127.0.0.1:8000/' payload = {'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({'user': 'foo'}) }) .then(resp => resp.json()) // or, resp.text(), etc .then(data => { console.log(data); // handle response data }) .catch(error => { console.error(error); });
以上是FastAPI接收JSON POST請求時出現422錯誤如何處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!