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

问题描述

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

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

我在邮递员的尸体看起来像:

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

但是,我不断从FastAPI收到422无法处理的实体错误,并带有错误详细信息:
值不是有效列表

我还用修改后的端点对其进行了测试:

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

一个简单的字符串数组,但会返回相同的错误

我是否缺少FastAPI对有效列表的定义?

解决方法

我很确定您的POST方法参数需要为整个请求主体建模,这实际上是单个对象,而不是列表。
要匹配您要发送的正文,您需要以下内容:

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

然后:

def create_mails(notas: schemas.NotaList) 
,

您的JSON不是有效列表。这是一个JSON对象,具有一个名为“ notas”的属性,该属性是一个列表。

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

尝试一下

[
  {"a":"1","d":"4"}
]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...