问题原因:
使用RestTemplate 发送get请求,URL参数包含#等特殊字符,请求报错,源码及报错如下:
源代码:
RestTemplate restTemplate = new RestTemplate();
//请求地址
StringBuffer forwardURL = new StringBuffer();
forwardURL.append("http://").append(url).append("/api/pmmng/pmcalc/pmdata/historydata?resources=/ne=102712/shelf=1/slot=1/card=1.1/port=1#portType=30");
ResponseEntity responseEntity = restTemplate.getForEntity(forwardURL.toString(), JSONObject.class, new HashMap());
报错内容:
解决办法:
使用UriComponentsBuilder,使restTemplate不转义解析特殊字符,和浏览器地址栏一样直接发送请求。
修改后代码如下:
RestTemplate restTemplate = new RestTemplate();
//请求地址
StringBuffer forwardURL = new StringBuffer();
forwardURL.append("http://").append(url).append("/api/pmmng/pmcalc/pmdata/historydata?resources=/ne=102712/shelf=1/slot=1/card=1.1/port=1#portType=30");
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(forwardURL.toString());
URI uri = builder.build().encode().toUri();
ResponseEntity responseEntity = restTemplate.getForEntity(uri, JSONObject.class);