RestTemplate发送请求url中带百分号%被转义
resteTemplate中url如果带%,被被转义成%25,无法正确的访问资源
例如: https://xxx.xxx.xx?sig=Tr5VnQ1enApvTxZJxsr99Bb5m%2BhM1%2FpSxXUOrmAVjN8%3D
会被转为:https://xxx.xxx.xx?sig=Tr5VnQ1enApvTxZJxsr99Bb5m%252BhM1%252FpSxXUOrmAVjN8%253D
解决办法:
将String的url参数转为URI参数:
示例代码:
String url = "https://xxx.xxx.xx?sig=Tr5VnQ1enApvTxZJxsr99Bb5m%2BhM1%2FpSxXUOrmAVjN8%3D";
try {
//将String的url转为URI对象
URI uri = new URI(url);
HttpHeaders header = new HttpHeaders();
Object o = restTemplate.exchange(
url,
HttpMethod.GET,
new HttpEntity<String>(header),
String.class);
} catch (URISyntaxException e) {
e.printStackTrace();
}
通过
URI uri = new URI(url);
问题就解决了
原因分析:
以restTemplate的exchange方法为例,其他的getForObject,getForEntity,postForObject等也是一样的,
如果参数是String类型的url,在excute发送请求之前,会先将String类型的url转为URI类型的url,就是在这个过程中出现的转换错误。
源码如下:
String类型的url需要先转为URI

URI类型的url就会直接执行


浙公网安备 33010602011771号