如何解决Spring Android-对存在继承关系的JSON对象进行反序列化会导致问题
|| 我面临反序列化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。型号(球),未标记为可忽略
在服务方面,我提供了棒球清单作为回应。谁能指出我的解决方案。
解决方法
这不是真正的Android问题。系统从
Ball
级别查看您的东西,因此您得到Unrecognized field \"field3\"
例外。我也将“ 4”声明为ArrayList,因为List不可序列化。
我会尝试创建并发送ArrayList<BaseBall>
只是看它是否有效,然后从那里去
,Spring最近发布(3.2.0.RELEASE),他们添加了MappingJackson2HttpMessageConverter
,它解决了我遇到的类似问题。 MappingJackson2HttpMessageConverter使用Jackson 2进行反序列化,而MappingJacksonHttpMessageConverter使用2.0之前的Jackson。尝试将以下转换器添加到RestTemplate
中并试一试。
MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter();
messageConverters.add(map);
restTemplate.setMessageConverters(messageConverters);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。