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 解析。
我还没有看到我的问题的答案,所以在这里。
我正在尝试传递一个 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 解析。