RestTempalete交换错误

时间:2017-05-30 19:47:34

标签: spring spring-mvc resttemplate

我正在尝试使用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]

1 个答案:

答案 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编码器生成: