我遇到了反序列化POJO对象的问题。
以下是服务端的POJO对象的结构。
Class Ball{
int field1;
int field2;
}
Class BaseBall extends Ball
{
int field3;
int field4;
}
Class BallList{
List<Ball> balls;
}
即使在Android客户端,我也有类似的POJO对象结构。
Android客户端代码:
RestTemplate restTemplate = new RestTemplate();
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(new MediaType("application","json"));
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<BallList> response = restTemplate.exchange(
url, HttpMethod.GET, entity, BallList.class);
if(response.getStatusCode() == HttpStatus.OK)
{
result += "OK";
}
04-13 18:17:46.127:ERROR / AndroidRuntime(4359):引起:org.springframework.web.client.ResourceAccessExcep tion:I / O错误:无法识别的字段“filed3”(类com.xx.yy .model.Ball),未标记为可忽略的
在服务方面,我提供棒球列表作为回应。任何人都可以指出我的解决方案。
答案 0 :(得分:0)
这不是Android问题。系统会从Ball
级别查看您的内容,因此会出现Unrecognized field "field3"
异常。此外,我会将acceptibleMediaType
声明为ArrayList,因为List不可序列化。
我会尝试创建并发送ArrayList<BaseBall>
只是为了查看它是否有效然后从那里开始
答案 1 :(得分:0)
Spring最近发布(3.2.0.RELEASE)并且他们添加了MappingJackson2HttpMessageConverter
,它解决了我遇到的类似问题。 MappingJackson2HttpMessageConverter使用Jackson 2进行反序列化,而MappingJacksonHttpMessageConverter使用2.0之前的Jackson。尝试将以下转换器添加到RestTemplate
并尝试一下。
MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter();
messageConverters.add(map);
restTemplate.setMessageConverters(messageConverters);