简介
尝试将 JSON 数据从 JavaScript 前端传输到使用 POST 请求的 FastAPI 后端,您可能会遇到类似“422 Unprocessable Entity”的错误消息。本文探讨了发生这种情况的原因,并提供了解决该问题的解决方案。
错误分析
该错误表明您的后端 FastAPI 端点需要查询参数,而不是JSON 正文。默认情况下,FastAPI 端点中的非路径参数被解释为查询参数。
解决方案
有多种方法可以解决此问题并启用 JSON 数据的发布:
创建一个 Pydantic 模型来表示 JSON数据,例如:
from pydantic import BaseModel class Item(BaseModel): eth_addr: str
在端点处理程序中:
@app.post('/ethAddress') def add_eth_addr(item: Item): return item
这要求 JSON 正文采用以下格式:
{ "eth_addr": "some addr" }
在您的 JavaScript 获取请求:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body()): return {'eth_addr': eth_addr}
这允许将 JSON 数据直接发布为字符串:
"some addr"
在 JavaScript 中:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify("some addr"), //...
from fastapi import Body @app.post('/ethAddress') def add_eth_addr(eth_addr: str = Body(embed=True)): return {'eth_addr': eth_addr}
这需要相同格式的 JSON 主体作为选项 2:
{ "eth_addr": "some addr" }
在 JavaScript 中:
//... headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ "eth_addr": "some addr" }), //...
结论
通过遵循这些解决方案,您可以成功发布来自您的 JavaScript 前端到 FastAPI 端点。请记住选择最适合您的具体要求的方法。
以上是将 JSON 数据从 JavaScript 发送到 FastAPI 时如何修复“422 Unprocessable Entity”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!