3

我正面临反序列化 POJO 对象的问题。

以下是 Service 端 POJO 对象的结构。

Class Ball{
    int field1;
    int field2;

}

Class BaseBall extends Ball
{
    int field3;
    int field4;
}

Class BallList{
    List<Ball> balls;
}

即使在 Android 客户端,我对 POJO 对象也有类似的结构。

安卓客户端代码:

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:错误/AndroidRuntime(4359):原因:org.springframework.web.client.ResourceAccessException:I/O 错误:无法识别的字段“filed3”(com.xx.yy.model 类。球),未标记为可忽略

在服务方面,我提供棒球列表作为响应。谁能指出我的解决方案。

4

2 回答 2

0

Spring 最近发布(3.2.0.RELEASE),他们补充说MappingJackson2HttpMessageConverter解决了我遇到的类似问题。MappingJackson2HttpMessageConverter 使用 Jackson 2 进行反序列化,而 MappingJacksonHttpMessageConverter 使用 pre-2.0 Jackson。尝试将以下转换器添加到您的RestTemplate并试一试。

MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter();
messageConverters.add(map);
restTemplate.setMessageConverters(messageConverters);
于 2013-01-27T14:20:57.010 回答
0

这不是真正的Android问题。系统会从Ball级别查看您的内容,因此您会遇到Unrecognized field "field3"异常。此外,我将声明acceptibleMediaType为 ArrayList,因为 List 不可序列化。

我会尝试创建和发送ArrayList<BaseBall>只是为了看看它是否有效,然后从那里开始

于 2011-04-13T21:41:40.930 回答