首頁 > web前端 > js教程 > FastAPI接收JSON POST請求時出現422錯誤如何處理?

FastAPI接收JSON POST請求時出現422錯誤如何處理?

Susan Sarandon
發布: 2024-12-16 09:26:10
原創
943 人瀏覽過

How to Handle FastAPI's 422 Error When Receiving JSON POST Requests?

FastAPI:發送JSON 資料時出現POST 請求錯誤422

建置RESTful API 時,經常會遇到與資料交換相關的問題,尤其是涉及POST 請求時。其中一個問題是在嘗試傳送 JSON 資料時收到「422 Unprocessable Entity」錯誤。

在提供的程式碼範例中:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user
登入後複製

此程式碼定義了一個需要 JSON 的 POST 端點包含「使用者」金鑰的有效負載。但是,當 HTTP 用戶端傳送與預期格式不符的 JSON 資料時,就會發生錯誤。為了解決這個問題,有幾個選項:

選項1:使用Pydantic 模型

Pydantic 模型提供了一種根據預定義模式驗證和反序列化JSON 負載的方法:

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post("/")
def main(user: User):
    return user
登入後複製

選項2:使用Body參數

FastAPI中的Body參數可以讓你直接解析無需定義Pydantic 模型的JSON 負載:

from fastapi import Body

@app.post("/")
def main(user: str = Body(..., embed=True)):
    return {'user': user}
登入後複製

選項3:使用Dict 類型

選項3:使用Dict 類型
from typing import Dict, Any

@app.post("/")
def main(payload: Dict[Any, Any]):
    return payload
登入後複製

雖然不太推薦,但您可以使用Dict 類型來接收JSON負載作為鍵值對:

選項 4:直接使用請求正文
from fastapi import Request

@app.post("/")
async def main(request: Request):
    return await request.json()
登入後複製

如果您確定傳入的資料是有效的 JSON,您可以使用 Starlette 的 Request物件來解析它:

測試選項

您可以使用以下命令測試這些選項:

import requests

url = 'http://127.0.0.1:8000/'
payload = {'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
登入後複製
Python 請求庫:

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);
});
登入後複製
JavaScript Fetch API:

透過實作其中一種方法,您可以解決 422 錯誤並成功處理 FastAPI POST 端點中的 JSON 資料。

以上是FastAPI接收JSON POST請求時出現422錯誤如何處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板