![](/img/trans.png)
[英]Webhook listener in FastAPI raises 422 Unprocessable Entity error
[英]FastAPI POST request with List input raises 422 Unprocessable Entity error
嗨,我是 FastAPI 的新手,想編寫一個 POST 請求,其中輸入參數是一個列表,但我收到錯誤 422 無法處理的實體:
{
"detail": [
{
"loc": [
"body"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}
我的 POST 請求是:
@router.post('',status_code=200)
def register(reg_id: int, reg_name: str, reg_option_list:List[int]):
reg_item = My_DB(
id=reg_id,
name=reg_name,
option_list=reg_option_list,
)
item = db.query(My_DB).filter(My_DB.id == service_id).first()
if item is not None:
raise HTTPException(status_code=400, detail="Item exists.")
db.add(reg_item)
db.commit()
return reg_item
但是當我像下面這樣更改代碼時,刪除列表輸入並將代碼中的值設置為列表時,一切正常:
@router.post('',status_code=200)
def register(reg_id: int, reg_name: str,):
reg_item = My_DB(
id=reg_id,
name=reg_name,
option_list=[1,2,3],
)
item = db.query(My_DB).filter(My_DB.id == service_id).first()
if item is not None:
raise HTTPException(status_code=400, detail="Item exists.")
db.add(reg_item)
db.commit()
return reg_item
對於我的列表輸入參數的任何幫助,我將不勝感激。 謝謝。
根據文檔(查看“提示”部分)
要聲明類型為
list
的查詢參數,如上例所示,您需要顯式使用Query
,否則它將被解釋為request body
。
因此,通過以您的方式聲明List
參數,端點將期望將其作為body
而不是query
參數接收。 因此, 422 unprocessable entity
error 與您提供的特定詳細信息(即缺少body
字段)有關。 您還可以通過 OpenAPI/Swagger UI 檢查,例如http://127.0.0.1:8000/docs
。 您會看到reg_option_list
的值應該傳遞給Request body
部分。
這樣做的方法是使用Query
顯式定義查詢參數,從而允許該參數在 URL 中多次出現。示例如下:
from fastapi import Query
@router.post('/')
def register(reg_id: int, reg_name: str, reg_option_list: List[int] = Query(...)):
# ...
示例 URL 查詢字符串:
?reg_id=1®_name=foo®_option_list=1®_option_list=2®_option_list=3
您可以使用默認類型的查詢
from typing import List
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
def read_items(q: List[int] = Query(None)):
return {"q": q}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.