通过Postman向FastAPI应用发送POST请求时,为什么会出现ValidationError 422?

ggazkfy8  于 2023-02-04  发布在  Postman
关注(0)|答案(1)|浏览(328)

我似乎无法通过Postman向FastAPI应用程序发送POST请求。

  • FastAPI版本0.89.1
  • Python版本3.10.9
from fastapi import FastAPI
from fastapi.params import Body
from pydantic import BaseModel

app = FastAPI()

class Post(BaseModel):
    title : str
    content : str

@app.get("/")
async def root():
    return {"message": "Hello."}

@app.post("/createposts/")
def create_posts(new_post:Post):
    print(new_post.title)
    return  {"new_post":f"title:"[new_post.title]}

我得到了以下错误

INFO:     Finished server process [44982]
INFO:     Started server process [45121]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     127.0.0.1:64722 - "POST /createposts/ HTTP/1.1" 422 Unprocessable Entity

我正在遵循教程,我似乎无法找到其他用户的答案.
我尝试使用dict: Body(...)输入参数。
我也使用 Postman ,这是错误:

{
    "detail": [
        {
            "loc": [
                "body"
            ],
            "msg": "value is not a valid dict",
            "type": "type_error.dict"
        }
    ]
}

这是我在Postman上请求的截图。

我使用POST端点向URL发出POST请求:

{
 "title":"a",
 "content":"b"
}
klsxnrf1

klsxnrf11#

在Postman中,需要将Body设置为JSON类型。
在屏幕截图中,您将其设置为文本

应设置为JSON

而且它应该像预期的那样工作Note 1,如屏幕截图所示。
正如MatsLindh在评论中所说,您可以打开代码段部分的面板,检查Postman是如何准确地转换您的请求的:

它应该显示

--header 'Content-Type: application/json'

JSON。您可能将其作为

--header 'Content-Type: text/plain'

FastAPI无法正确解析的文本。
附注1
这与验证错误无关,但是端点上的f字符串中有一个输入错误,值的右双引号放错了位置。
这一点:

return  {"new_post":f"title:"[new_post.title]}

应为:

return  {"new_post": f"title:[{new_post.title}]"}

相关问题