http请求body无法获取

请问:我有一个get方法,在postman中可以获取到body。但是用另外一个方法向这个url发送请求时,无法接收到body是为什么.

  @GetMapping ("/ip")
//    , @RequestBody Object body
    public Object getIp( HttpServletRequest request,@RequestBody Object body ) throws IOException {
        System.out.println( body );
         return body;
    }

@GetMapping("/submitIp")
    public String getIpByThisIp(HttpServletRequest request){
        String authorization = request.getHeader( "authorization" );
        String url = "http://localhost:30999/httpbin/ip";
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType( MediaType.APPLICATION_JSON );
        String jsonAuthorization = JSONObject.toJSONString( authorization );
        HttpEntity entity = new HttpEntity( jsonAuthorization,headers );
        HttpMethod  method = HttpMethod.GET;
        ResponseEntity< String > exchange = restTemplate.exchange( url, method, entity, String.class );
        return "ok";
    }

img

img

postman没有限制get请求还能发送body数据,但是java的客户端和js基本都限制了,你发送get请求就会丢弃body,发json就别用get

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7414360
  • 以下回答来自chatgpt:

    可能原因:

    1. 另一个方法发送的请求没有正确设置请求头,导致服务器无法正确解析请求体。 解决方案:设置Content-Type请求头为对应请求体的类型,例如application/json或application/x-www-form-urlencoded。

    2. 另一个方法发送的请求没有正确设置请求体,或请求体格式不正确,导致无法正确传输请求体。 解决方案:检查请求体格式是否正确,并确保请求体已正确设置。

    3. 另一个方法发送的请求存在跨域问题,导致服务器无法接收到请求体。 解决方案:采用JSONP、CORS等方式解决跨域问题,确保请求已能正常到达服务器。

    针对不同情况的解决方案可能不同,可以根据具体情况进行调整。在代码实现上,可以通过设置请求头、请求体和处理跨域等方式来解决。例如使用fetch API发送POST请求时,可以通过设置headers和body选项来发送请求体,并设置mode为cors来处理跨域问题。代码示例:

    fetch(url, {
      method: 'POST',
      mode: 'cors',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(data)
    }).then(response => {
      // 处理响应
    }).catch(error => {
      // 处理错误
    });
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^