在 AXIOS 中发送 GET 方法的请求正文会引发错误

IT技术 javascript reactjs
2021-02-23 14:35:26

我有一个 React 应用程序,我将 POST 方法更改为 GET 请求正文。它适用于 POST 请求,但是当我将方法更改为 GET 时,它给了我错误-

message: "org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public 

我的前端代码-

export const setData = (getData)  => dispatch => {
    axios({
        method: 'GET',
        url: 'http://localhost:8080/api',
        headers: {
          'Content-Type': 'application/json'
        },
        data: getData
      })
      .then (response => {
      dispatch({
        type: API_DATA, 
        payload: response.data
      })
      dispatch({
        type: SET_SEARCH_LOADER, 
        payload: false
      })
      })
      .catch(function(error) {       
      })
}

有人可以让我知道我在这里缺少什么。根据我的理解,http 允许有一个 GET 方法的请求正文。

3个回答

根据我的理解,http 允许有一个 GET 方法的请求正文。

虽然这在技术上是正确的(尽管说它只是没有明确禁止它可能更准确),但这是一件非常奇怪的事情,并且大多数系统不希望 GET 请求具有主体。

因此,很多图书馆不会处理这个问题。

Axois文档说:

  // `data` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', and 'PATCH'

在后台,如果您在 Web 浏览器中运行 Axios 客户端,它将使用 XMLHttpRequest。如果你查看的规范,它说:

client . send([body = null])

发起请求。body 参数提供请求正文(如果有),如果请求方法是 GET或 HEAD ,则将被忽略

我的 getData 是一个空对象,我正在尝试发送它。这行不通吗?
2021-04-22 14:35:26
@techiequestie - 不,不会。浏览器将忽略您尝试设置为请求正文的任何​​内容,并在没有任何内容的情况下发送 GET 请求。
2021-04-29 14:35:26
任一方请求应该是一个POST请求或服务器应该没有想到的请求体上的GET请求。我不知道请求的要求是什么,所以我不能说哪些是正确的方法。
2021-05-06 14:35:26
我有另一个来自后端的 api,他们已将数据作为参数附加到 api 中,然后它就可以工作了。但是对于这个 api,它不存在,我想弄清楚这是否是后端必须的,或者有什么方法可以通过 UI 处理这个问题。
2021-05-08 14:35:26
那我应该怎么处理呢?我需要在请求中添加任何参数吗?
2021-05-13 14:35:26

如果你想在 axios 中通过 get 请求发送参数,你应该将参数发送为params.

如果您想"Content-type":"application/json"使用 get 请求设置和发送参数,您还应该发送一个空data对象。

例如:

const AUTH_TOKEN = 'Bearer token'
const config = {
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': AUTH_TOKEN,
    },
    data: {},
    params: {
        "post_id": 1
    }
}
axios.get("http://localhost/api/v1/posts/", config)

这不是 axios,错误源自您正在与之交谈的 Java 后端。请求正文中的公共字段丢失。

如果您只想将数据作为参数发送(这很奇怪),请使用params而不是传递它data(如下所示:https : //github.com/axios/axios#example)。

我个人认为您的 API 不应该通过请求正文支持 GET(与开发人员交谈并要求提供文档)。

@Quentin 是的,你说得对,我的问题错了。我修改了我的答案。
2021-05-01 14:35:26
OP 正在询问为什么缺少请求正文(这Axios)
2021-05-10 14:35:26
我不明白。我在这里错过了什么吗?
2021-05-14 14:35:26