2017-05-30 70 views
0

我想當我在瀏覽器中運行這個執行此REST API調用如下所示,使用RESTTemplate 運行良好 http://ftc-wbpyrdb201:8080/statdata/InsStatData/_aggrs/getData?avars=%7B%22issuerId%22:19038%7DRestTempalete交換錯誤

但是當我使用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

我想你在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 

這兩個網址之間有一點區別,而不是: w3school編碼器產生%3A