2013-02-08 69 views
7

我必須在返回text/xml的服務上調用GET。調用在URL中具有查詢參數的'REST'服務

端點是這樣的:

http://service.com/rest.asp?param1=34&param2=88&param3=foo 

當我直接打這個網址上的瀏覽器(或某些UI工具),所有的好。我得到一個迴應。

現在,我試圖用CXF WebClient使用了一塊這樣的代碼來獲取結果:

String path = "rest.asp?param1=34&param2=88&param3=foo"; 

webClient.path(path) 
    .type(MediaType.APPLICATION_JSON) 
    .accept(MediaType.TEXT_XML_TYPE) 
    .get(Response.class); 

我調試的代碼,發現正在發送的請求URL編碼出現類似這個:

http://service.com/rest.asp%3Fparam1=34%26param2=88%26param3=foo 

現在,問題是服務器似乎不明白這個請求與編碼的東西。它會拋出404錯誤。在瀏覽器上點擊此編碼的URL也會導致404錯誤。

我應該怎麼做才能成功獲得響應(或不讓WebClient對url進行編碼)?

回答

10

指定使用查詢方法的參數:

String path = "rest.asp"; 
webClient.path(path) 
    .type(MediaType.APPLICATION_JSON) 
    .accept(MediaType.TEXT_XML_TYPE) 
    .query("param1","34") 
    .query("param2","88") 
    .query("param3","foo") 
    .get(Response.class); 
+0

謝謝安德烈。這正是我需要的。我看了一下,打算使用.query,但誤解了文檔。 –

0

您需要對您的URL進行編碼。您可以使用URLEncoder的類做如下圖所示:

請更換您的行

String path = "rest.asp?param1=34&param2=88&param3=foo"; 

String path = URLEncoder.encode("rest.asp?param1=34&param2=88&param3=foo");