我正在尝试使用RESTTemplate执行此REST api调用,如下所示 当我在浏览器上运行它运行正常 http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData?avars=%7B%22issuerId%22:19038%7D
但是当我在代码中使用URL时
http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData?avars={"issuerId":19038}
代码是
requestURI="http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData";
UriComponentsBuilder builder =
UriComponentsBuilder.fromUriString(requestURI)
// Add query parameter
.queryParam("avars","{\"issuerId\":19038}");
System.out.println(builder.buildAndExpand(requestURI).toUri());
System.out.println(builder.toUriString());
ResponseEntity<String> responseEntity = restTemplate
.exchange(builder.toUriString() , HttpMethod.GET, null,String.class);
我收到以下错误,请告诉我这里可能出现的问题。
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:531) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
答案 0 :(得分:0)
我认为你在URL的查询字符串中有问题,我用你的代码打印出uri
System.out.println(builder.toUriString());
打印的字符串是
http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData?avars=%7B%22issuerId%22:19038%7D
但如果您使用w3cschool encoder对相同的网址进行编码,则会获得
http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData?avars=%7B%22issuerId%22%3A19038%7D
两个网址之间存在一点差异,而不是{3}} w3school编码器生成: