restTemplate的exchange方法get请求报400 Bad request【restTemplate Bug】的解决办法

填坑记录

  • 如下代码,url=http://www.baidu.com时请求报400
HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.add("Authorization", authorization);
        requestHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        MultiValueMap requestBody = new LinkedMultiValueMap<>();
        if (map != null) {
            map.forEach((k, v) -> {
                if (StringUtils.isNotBlank(v)) {
                    requestBody.add(k,v);
                }
            });
        }
        HttpEntity requestEntity = new HttpEntity<>(requestBody, requestHeaders);
        try {
            ResponseEntity res = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
            return new HttpResDTO(res.getStatusCodeValue(), res.getBody());
        } catch (HttpClientErrorException ex) {
            log.error("rest template for face exception, error code: {}, error message: {}", ex.getRawStatusCode(), ex.getMessage());
            return new HttpResDTO(ex.getRawStatusCode(), ex.getResponseBodyAsString());
        } catch (UnknownHttpStatusCodeException e) {
            String responseBodyAsString = e.getResponseBodyAsString();
            log.warn("UnknownHttpStatusCodeException:{}",responseBodyAsString);
            JSONObject parse = JSONObject.parseObject(responseBodyAsString);
            throw new RuntimeException(parse.get("message").toString());
        }
  • 解决方案
    1. get请求直接在url上拼参数,如?type=1&name=xx
    2. String uri =tempUrl + “?keys={keys}”;通过map传递keys
      Map map = new HashMap<>(1);
      map.put(“keys”, “xdfdf”);
      ResponseEntity res = restTemplate.getForEntity(url, String.class, map);

你可能感兴趣的:(restTemplate的exchange方法get请求报400 Bad request【restTemplate Bug】的解决办法)