2013-11-03 222 views
1

在我的瀏覽器中,其餘的API url正在工作,我可以看到XML結果。Spring RestTemplate getForObject()給出401未授權的異常

"http://[email protected]:8090/prestashop/api/products/1" 

我想從Java客戶端調用此URL並獲得結果。爲此,我正在使用RestTemplate。

String result = restTemplate.getForObject("http://[email protected]:8090/prestashop/api/products/1" 
    , String.class); 

這是給下面的錯誤,

WARNING: GET request for  http://[email protected]:8090/prestashop/api/products/1 resulted in 401 (Unauthorized); invoking error handler 
Disconnected from the target VM, address: '127.0.0.1:49533', transport: 'socket' 

org.springframework.web.client.HttpClientErrorException: 401 Unauthorized 
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) 
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:537) 

不知道爲什麼發生這種情況。 我們不能用表單username @ host/appplication和RestTemplate調用URL嗎? 或者我用RestTemplate調用這個URL的方式不正確?

關於, -Lasith。

+2

當您從瀏覽器使用該URL時會發生什麼?它看起來也需要密碼,或者其他形式的身份驗證? – MattR

+0

不,它不需要密碼。通過瀏覽器,它提供了XML格式的產品信息。 – lsc

+0

嗨,我解決了這個問題。看來用戶@主機/應用程序無法識別Spring測試模板。所以我們需要手動設置授權。 DefaultHttpClient httpClient = new DefaultHttpClient(); BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(user,password)); httpClient.setCredentialsProvider(credentialsProvider); – lsc

回答

2

我面臨類似的問題,並使用resttemplate.exchange方法解決它。該步驟是把你的驗證細節RestRequestHeaderInfo這應該是內部HttpEntity>這個實體傳遞到交換法象下面這樣:

response = restTemplate.exchange(url, HttpMethod.GET, request, Response.class); 

如果響應是JSON格式就像我的情況下,響應與持有者類相應的數據將由我的類路徑中的Jackson庫填充:它工作。