# 问题:
使用RestTemplate调用rabbitmq api的接口, 对于virtualhost 带有”/“的字符串,,get方式请求,对于含“/”的encode转义以后请求不成功。
# 原因:
在拼接url时候 “/” encode被转义成“%2F”,url地址中有特殊的转义字符,restTemplate会默认进行转义
如果拼接url的时候不对“/”进行转义, restTemplate对于url中有“/”也会无视通过
原始url:http://xxxxxx/api/queues/%2F/queue-27
在RestTemplate转义的url:http://xxxxxx/api/queues/%252F/queue-27
url中%是特殊的字符,并转义为: %25. 但是被转义之后的URL不是正确的URL地址,所以不能请求成功。
debug源码后发现 真正进行UriString构建的操作在org.springframework.web.util.HierarchicalUriComponents类中 encodeBytes方法会对%的进行转义处理
# 解决:
第一种方式 使用httpClient
第二种方式,改写RestTemplate 通过UriComponentBuilder
|
ps:RestTemplate 进行数据请求如果url中带有特殊字符时会导致请求出错,遇到‘#’的问题,接收到的传参会省略‘#’后面的内容;还有其他一些特殊符号如 +、=、&、%等
- 本文标题: RestTemplate特殊字符问题
- 文章作者: sherryriver(木木三可)
- 发布时间: 2019.05.09
- 本文链接: https://sherryriver.github.io/2019/05/09/restTemplate特殊字符问题/
- 许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。