2011-04-13 20 views
3

我正面臨反序列化POJO對象的問題。Spring Android - 反序列化JSON對象導致繼承時出現問題

以下是服務端的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): Caused by: org.springframework.web.client.ResourceAccessExcep tion: I/O error: Unrecognized field "filed3" (Class com.xx.yy.model.Ball), not marked as ignorable

在服務方面,我所提供的名單棒球作爲響應。任何人都可以指出我的解決方案。

回答

0

這不是真正的Android問題。系統從Ball級別看你的東西,因此你得到Unrecognized field "field3"異常。另外我會聲明acceptibleMediaType作爲ArrayList,因爲List是不可序列化的。

我會嘗試創建和發送ArrayList<BaseBall>只是爲了看看它是否工作,然後從那裏

0

春去最近公佈(3.2.0.RELEASE),他們加入MappingJackson2HttpMessageConverter它解決了類似的問題,我有。 MappingJackson2HttpMessageConverter使用Jackson 2進行反序列化,而MappingJacksonHttpMessageConverter使用2.0之前的Jackson。嘗試添加以下轉換器到您的RestTemplate並給它一個鏡頭。