3

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: エラー/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 は 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また、List はシリアル化できないため、ArrayList として宣言します。

それが機能するかどうかを確認するためだけに作成して送信ArrayList<BaseBall>し、そこから移動しようとします

于 2011-04-13T21:41:40.930 に答える