首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FastAPI输入列表的POST请求出现422错误

FastAPI输入列表的POST请求出现422错误
EN

Stack Overflow用户
提问于 2022-03-10 15:31:34
回答 1查看 1.3K关注 0票数 1

嗨,我是FastAPI的新手,我想写一个POST请求,其中输入参数是一个列表,但是我得到了错误422不可处理的实体:

代码语言:javascript
运行
复制
{
  "detail": [
    {
      "loc": [
        "body"
      ],
      "msg": "field required",
      "type": "value_error.missing"
    }
  ]
}

我的职位请求是:

代码语言:javascript
运行
复制
@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

但是,当我像下面这样更改代码,删除列表输入并将代码中的值设置为列表时,一切都很好:

代码语言:javascript
运行
复制
@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

我将感谢关于我的列表输入参数的任何帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 16:30:15

根据文档 (请看一下“提示”部分)

要使用list类型声明查询参数,如上面的示例所示,您需要显式地使用Query,否则它将被解释为请求体。

因此,通过按照您的方式声明一个List参数,端点希望接收它为body,而不是query参数。因此,包含您提供的特定细节的422 unprocessable entity错误(即缺少body )。您还可以通过OpenAPI (例如,http://127.0.0.1:8000/docs )检查这一点。您将看到,reg_option_list的值预计将在Request body部分中给出。

这样做的方法是Query,从而允许参数在URL中多次出现。例子如下:

代码语言:javascript
运行
复制
from fastapi import Query
def register(reg_id: int, reg_name: str, reg_option_list: List[int] = Query(...)):

此外,请记住为您的路由指定路径名称,例如/register,而不是要测试的空字符串''.Sample URL:

代码语言:javascript
运行
复制
/register?reg_id=1&reg_name=foo&reg_option_list=1&reg_option_list=2&reg_option_list=3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71426756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档