首页  >  文章  >  后端开发  >  将 JSON 数据从 JavaScript 发送到 FastAPI 时如何修复“422 Unprocessable Entity”错误?

将 JSON 数据从 JavaScript 发送到 FastAPI 时如何修复“422 Unprocessable Entity”错误?

DDD
DDD原创
2024-11-13 01:06:02460浏览

How to Fix

对从 JavaScript 到 FastAPI 的 JSON Post 请求进行故障排除

简介

尝试将 JSON 数据从 JavaScript 前端传输到使用 POST 请求的 FastAPI 后端,您可能会遇到类似“422 Unprocessable Entity”的错误消息。本文探讨了发生这种情况的原因,并提供了解决该问题的解决方案。

错误分析

该错误表明您的后端 FastAPI 端点需要查询参数,而不是JSON 正文。默认情况下,FastAPI 端点中的非路径参数被解释为查询参数。

解决方案

有多种方法可以解决此问题并启用 JSON 数据的发布:

选项 1:定义 Pydantic 模型

创建一个 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"
}),
//...

选项 2:使用 FastAPI Body()输入

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"),
//...

选项 3:使用 FastAPI 的嵌入功能(推荐用于单一主体参数)

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn