0
votes

I'm using FastAPI and I'm trying to send a JSON array of JSON objects to my post endpoint, in the body. My endpoint is defined as:

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

My body in Postman looks like:

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

However, I keep getting the 422 unprocessable entity error from FastAPI, with the error detail:
value is not a valid list

I also tested it with a modified endpoint:

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

and with a simple string array, but the same error is returned.

Am I missing FastAPI's definition of a valid list?

1

1 Answers

4
votes

I'm pretty sure your POST method parameter needs to model the entire request body, which is indeed a single object, and not a list.
To match the body you're trying to send, you'd need something like:

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

and then:

def create_mails(notas: schemas.NotaList)