我在手机上使用 spring mobile 和 spring mvc 3 在 android 应用程序和 java 服务器之间进行通信时遇到问题。
我想将一些通用数据传输到服务器并返回。
在我从客户端发送数据后,应用程序崩溃并出现异常 415:不支持的媒体类型。
我的服务器实现如下所示:
@RequestMapping(value = "/restclient/dosomething", method = RequestMethod.POST)
public @ResponseBody Container<A, B, C> getRestTasks(@RequestBody Container<A, B, C> container){
//do something with container
return container;
}
我的客户看起来像这样:
public <T> T get(Class<T> gen, String url, Object obj) {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
ClientSessionHttpRequestInterceptor interceptor = new ClientSessionHttpRequestInterceptor();
interceptors.add(interceptor);
restTemplate.setInterceptors( interceptors);
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
return gen.cast(restTemplate.postForObject(url, obj, gen));
}
get 方法是这样调用的:
Container<A, B, C> prototype = new Container<X, Y, Z>();
Container<X, Y, Z> container= get(Container.class, url, prototype);
X 是 A 的子类 Y 是 B 的子类 Z 是 C 的子类
我认为在序列化(MappingJacksonHttpMessageConverter)期间类型信息会丢失。
用wireshark跟踪请求我发现X,Y,Z的类型被设置为对象......
我不知道如何解决这个问题......
我将不胜感激任何有用的想法,并为我的英语感到抱歉;-)!
非常感谢,zix