来自android的REST调用中的类Cast Exception

时间:2017-09-26 08:37:03

标签: java android

我正在尝试使用MyApp从我的Android应用程序中的服务器172.16.xx.15上运行我的Web应用程序resttemplate中的项目列表。 当我喜欢

时,一切正常
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 security,我需要在访问此项列表之前对用户进行身份验证。所以我试图通过身份验证获得相同的项目列表。我使用以下代码:

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

请在这种情况下提供帮助。

2 个答案:

答案 0 :(得分:1)

您直接将ResponseEntity的交换响应投射到您的收藏中

您需要先收集

ReaponseEntity<List<LinkedHashMap>> response

然后在上面调用

response.getBody()

答案 1 :(得分:0)

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

restTemplate.exchange方法返回ResponseEntity<T>对象,因此获取ClassCastException是绝对正常的。您需要将上述行重写为以下内容:

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