我被困住了。我想我已经尝试了一切,但似乎没有任何效果。 我在 React 中有一个简单的数组,如下所示:
["2023-06","2023-07","2023-08","2023-09","2023-10","2023-11","2023-12","2024-01", "2024-02","2024-03","2024-04","2024-05"]
由此创建:
let mydate = JSON.stringify(rowData.map(x => x.Date))
我正在尝试使用以下方法将此数据发布到我的 API 服务:
const savePlan = async () => {
try {
console.log(mydate)
const response = await axios.post('/saveplan', {mydate},
{ headers: {
'Content-Type': 'application/json'}}
);
console.log("data saved successfully!", response.data);
} catch (error) {
console.error('Error saving data', error);
}
};
这是我的终点
@app.post("/saveplan", tags=['save'], status_code=200)
async def savePlan(items: Item):
dates = items.dates
return {"received": dates}
还有 Pydantic 模型:
class Item(BaseModel):
dates: List[str]
这是服务器响应:
信息:127.0.0.1:59848 - “POST /saveplan HTTP/1.1”422 无法处理的实体
有谁知道为什么我从这么简单的字符串数组中得到 422 ?
我不知道
FastAPI
,但我猜问题出在客户端。
我假设
Date
字段实际上是 string
而不是 Date
对象,那么:
let mydate = {
dates: rowData.map(x => x.Date)
};
否则,我的建议是序列化为ISO。然而,这可能与
FastAPI
有一定关系,我可能是错的。
let mydate = {
dates: rowData.map(x => x.Date.toISOString())
};
此时:
const savePlan = async () => {
try {
console.log(mydate)
const response = await axios.post('/saveplan', mydate);
console.log("data saved successfully!", response.data);
} catch (error) {
console.error('Error saving data', error);
}
};
您甚至不需要在标头中指定内容类型,因为这是隐式的。