携帯電話で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 のタイプがオブジェクトに設定されていることがわかりました...
私はこの問題を解決する考えがありません...
有用なアイデアをいただければ幸いです。私の英語で申し訳ありません ;-)!
どうもありがとう、ジックス