我正在尝试从运行在服务器服务器上的MyApp
上的web应用程序172.16.xx.15
上获取项目列表,使用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);
当我匿名访问上面的url时,上面的代码可以正常工作。但是我在服务器端使用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
在这种情况下请帮忙。
发布于 2017-09-26 09:18:37
直接将exchange的响应(即ResponseEntity )转换到集合中。
你需要先收集,因为
ReaponseEntity<List<LinkedHashMap>> response
然后在上面调用
response.getBody()
发布于 2017-09-26 09:19:06
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()
https://stackoverflow.com/questions/46421564
复制相似问题