FastAPI发现我的JSON对象数组是无效列表

bxpogfeg  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在使用FastAPI,并试图将JSON对象的JSON数组发送到我的post端点,在主体中。我的端点定义为:

@router.post("/create_mails")
def create_mails(notas: List[schemas.Nota], db: Session = Depends(get_db)):

Postman中的身体看起来像:

{
    "notas": [{"a":"1","b":"2","c":"3","d":"4"},
              {"a":"1","b":"2","c":"3","d":"4"}]
}

但是,我不断从FastAPI得到422 unprocessable entity错误,错误详细信息如下:

  • 值不是有效列表 *

我还使用修改后的端点测试了它:

@router.post("/create_mails")
def create_mails(notas: List[str] = Body([]), db: Session = Depends(get_db)):

和一个简单的字符串数组,但返回相同的错误。
我是否错过了FastAPI对有效列表的定义?

uidvcgyl

uidvcgyl1#

您的POST方法参数需要对整个请求体进行建模,这实际上是一个对象,而不是一个列表。
为了匹配你要发送的尸体,你需要这样的东西:

class NotaList(BaseModel):
    notas: List[Nota]

然后:

def create_mails(body: schemas.NotaList)

请注意,函数中的参数名称 * 不是 * 数据模型的一部分,它只是表示“顶级”主体对象。我在这里将其重命名为body以澄清这一点。请求体中的notas将被分配给类的notas成员,因此在您的方法中,您将访问以下内容(例如):

for nota in body.notas:
    # do stuff

相关问题