2017-09-26 24 views
1

我想從我的Android應用程序使用resttemplate從我的web應用程序MyApp運行在服務器服務器172.16.xx.15上的項目列表。 一切工作正常,當我不喜歡在Android的REST調用類拋出異常

String url="http://172.16.xx.15:8080/MyApp/GetAllItem"; 

RestTemplate restTemplate=new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

List<LinkedHashMap> items=restTemplate.getForObject(url, List.class); 

上面的代碼時,我對上面的網址匿名訪問的正常工作。但我在服務器端使用spring安全性,我需要在訪問這個項目列表之前驗證用戶身份。所以我正在嘗試使用身份驗證獲取相同的項目列表。我正在使用以下代碼:

String username="test" 
String password="test" 
HttpAuthentication authHeader=new HttpBasicAuthentication(username, password) 
HttpHeaders requestHeaders=new HttpHeaders(); 
requestHeaders.setAuthorization(authHeader); 
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON); 
RestTemplate restTemplate=new RestTemplate(); 
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
List<LinkedHashMap> items=(List<LinkedHashMap>)restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), List.class); 

此代碼也有效,但會引發錯誤和應用程序崩潰。

java.lang.ClassCastException:org.springframework.http.ResponseEntity 不能轉換爲java.util.List的

請在這種情況下幫助。

回答

1

您直接鑄造交換反應是ResponseEntity到您的收藏

你需要先收集儘可能

ReaponseEntity<List<LinkedHashMap>> response 

然後在上面所說的

response.getBody() 
+0

感謝您的幫助。還有一件事。如何認證用戶意味着真或假。 – ashok

+0

如果這有幫助請標記爲已接受) – Rizwan

0
List<LinkedHashMap> items=(List<LinkedHashMap>)restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), List.class); 

restTemplate.exchange方法返回一個ResponseEntity<T>對象,因此它是ab正常地得到ClassCastException。你需要重寫你的上面的行,像這樣:

ResponseEntity<<LinkedHashMap>> entity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), List.class); 
List<LinkedHashMap> items = entity.getBody()