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就會直接執行

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM