FastAPI 未从 Axios 接收简单的字符串数组

问题描述 投票:0回答:1

我被困住了。我想我已经尝试了一切,但似乎没有任何效果。 我在 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 ?

reactjs axios fastapi
1个回答
0
投票

我不知道

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);
    }
  };

您甚至不需要在标头中指定内容类型,因为这是隐式的。

© www.soinside.com 2019 - 2024. All rights reserved.