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

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

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

我正在尝试传递一个 json 对象,例如:在 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 无效。

您的代码需要一个包含 string-value 的 JSON 对象,您正在 server-side.

上对其进行解码

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

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

备选方案: implement a nested model 对于所有对象:

class Event(BaseModel):
    name: str

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

class AddActionModel(BaseModel):
    action_reaction: ActionReaction = None

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