我正在尝试使用Spring来解析XML响应。我过去成功实现了Spring来解析JSON响应,但由于某种原因,我遇到了XML问题。Spring for Android - 使用SimpleXML进行XML解析
我下载并将Simple jar添加到我的构建路径。我没有收到任何编译错误,但是当我运行它时,出现问题。这里是我的代码:
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(new MediaType("text","xml")));
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
String url = "MyURL";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());
try{
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
Log.d(TAG, "response - " + responseEntity.getBody());
}catch(HttpMessageNotReadableException e){
Log.d(TAG, "message " + e.getMessage());
}
当我运行这段代码我得到的错误是:
02-11 16:49:28.905: E/AndroidRuntime(5454): FATAL EXCEPTION: Thread-126
02-11 16:49:28.905: E/AndroidRuntime(5454): org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.String]
02-11 16:49:28.905: E/AndroidRuntime(5454): at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:632)
02-11 16:49:28.905: E/AndroidRuntime(5454): at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:473)
02-11 16:49:28.905: E/AndroidRuntime(5454): at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:438)
02-11 16:49:28.905: E/AndroidRuntime(5454): at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:414)
02-11 16:49:28.905: E/AndroidRuntime(5454): at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity.getCategories(RRBCatalogueActivity.java:337)
02-11 16:49:28.905: E/AndroidRuntime(5454): at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity$7.run(RRBCatalogueActivity.java:395)
02-11 16:49:28.905: E/AndroidRuntime(5454): at java.lang.Thread.run(Thread.java:856)
错误是扔在这条线:ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
只是为了测试,我使用这个:restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
从我的消息转换器,我得到了正确的响应作为一个字符串。
任何想法?
我注释了设置accept头的行,它没有什么区别......我也是尝试使用几种不同的对象类型作为响应实体,但没有运气。 – coder 2013-02-12 14:18:59