【问题标题】:Spring Android - Deserializing JSON objects causing issues when there is inheritanceSpring Android - 在继承时反序列化 JSON 对象会导致问题
【发布时间】:2011-04-13 21:16:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: android spring resttemplate


    【解决方案1】:

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

    我会尝试创建并发送ArrayList&lt;BaseBall&gt; 只是为了看看它是否有效,然后从那里开始

    【讨论】:

      【解决方案2】:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多