RestTemplate 发送GET请求包含特殊字符-01(KILL-BUG)

问题原因:
使用RestTemplate 发送get请求,请求URL参数包含特殊字符串,如:?、=、!、{}…等特殊字符,在浏览器地址栏中请求没有任何问题,但使用restTemplate请求报错,源码及报错如下:
源码

private void requestInfo() {
   try {
        RestTemplate restTemplate = new RestTemplate();
        String req = "http://192.168.9.76:9090/api/v1/query?query=node_sockstat_UDP_inuse{instance=~\"192.168.9.76:9100\"}" ;
        Map map = restTemplate.getForObject(req, Map.class);
        System.out.println(map);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

报错内容
在这里插入图片描述
解决办法
使用UriComponentsBuilder,使restTemplate不转义解析特殊字符,和浏览器地址栏一样直接发送请求,修改代码如下:

private static void requestInfo() {
    try {
        RestTemplate restTemplate = new RestTemplate();
        String req = "http://192.168.9.76:9090/api/v1/query?query=node_sockstat_UDP_inuse{instance=~\"192.168.9.76:9100\"}" ;
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(req);
        URI uri = builder.build().encode().toUri();
        Map map = restTemplate.getForObject(uri, Map.class);
        System.out.println(map);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

关键代码截图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值