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<String, Object> requestBody = new LinkedMultiValueMap<>();
        if (map != null) {
            map.forEach((k, v) -> {
                if (StringUtils.isNotBlank(v)) {
                    requestBody.add(k,v);
                }
            });
        }
        HttpEntity<MultiValueMap> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
        try {
            ResponseEntity<String> 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<String, String> map = new HashMap<>(1);
      map.put(“keys”, “xdfdf”);
      ResponseEntity res = restTemplate.getForEntity(url, String.class, map);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值