繁体   English   中英

FASTAPI:出现错误 422:尝试在体内传递 json object 时出现无法处理的实体

[英]FASTAPI: Getting Error 422 : Unprocessable Entity when trying to pass a json object inside body

我还没有看到我的问题的答案,所以在这里。

我正在尝试传递 json object 之类的:在fastapi中的post请求正文中,以便稍后将其存储在数据库中或以任何方式处理它

{
  "action_reaction": {
    "action": {
      "name": "test"
    },
    "reaction": {
      "name2": "test2"
    }
  }
}

在此处输入图像描述

这是我的代码:

class AddActionModel(BaseModel):
    action_reaction: str = None

@router.post("/add_reaction")
async def add_action_reaction(addActionModel: AddActionModel, x_token: str = Header(None)):
    print(f'addActionModel: {addActionModel}')

    action_reactions = json.loads(addActionModel.action_reaction)
    action = action_reactions["action"]
    reaction = action_reactions["reaction"]
    return {"success": True}

问题是我总是得到这样的回应: 在此处输入图像描述

有谁知道如何做到这一点?

谢谢

您发送的 JSON 无效。

您的代码需要一个包含字符串值的 JSON object,您在服务器端对其进行解码。

为了使您的请求有效,您需要转义action_reaction中的引号,如下所示:

{
    "action_reaction": "{\"action\": {\"name\": \"test\"}, \"reaction\": {\"name2\": \"test2\"}}"
}

替代方案:为所有对象实现嵌套 model

class Event(BaseModel):
    name: str

class ActionReaction(BaseModel):
   action: Event
   reaction: Event

class AddActionModel(BaseModel):
    action_reaction: ActionReaction = None

如果你这样定义,那么后端不需要json.loads ,因为整个 object 将被 FastAPI + Pydantic 解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM