Sending Request body for GET method in AXIOS throws error

后端 未结 3 746
暖寄归人
暖寄归人 2020-12-20 07:47

I have a React application where I am changing POST method to GET with the request body as it is. It works fine with POST request however when I change the method to GET, it

相关标签:
3条回答
  • 2020-12-20 08:33

    This is not axios, the error origniates from the java backend you're talking to. The public field in your request body is missing.

    If you just want to send the data as parameters (which would be odd), pass it using params instead of data (as shown here: https://github.com/axios/axios#example).

    I personally don't think your API should support GET with a request body (talk to the devs and ask for documentation).

    0 讨论(0)
  • 2020-12-20 08:46

    As per my understanding, http allows to have a request body for GET method.

    While this is technically true (although it may be more accurate to say that it just doesn't explicitly disallow it), it's a very odd thing to do, and most systems do not expect GET requests to have bodies.

    Consequently, plenty of libraries will not handle this.

    The documentation for Axois says:

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

    Under the hood, if you run Axios client side in a web browser, it will use XMLHttpRequest. If you look at the specification for that it says:

    client . send([body = null])

    Initiates the request. The body argument provides the request body, if any, and is ignored if the request method is GET or HEAD.

    0 讨论(0)
  • 2020-12-20 08:51

    If you want to send parameters with get request in axios, you should send parameters as params.

    If you want to set "Content-type":"application/json" and send params with get request, you should also send an empty data object.

    For example:

    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)
    
    0 讨论(0)
提交回复
热议问题