0

Spring for Android を使用して XML 応答を解析しようとしています。過去にSpringを実装して JSON 応答を解析することに成功しましたが、何らかの理由で XML に問題が発生しています。

Simple jarをダウンロードして、ビルド パスに追加しました。コンパイル エラーは発生しませんが、実行すると問題が発生します。これが私のコードです:

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(new MediaType("text","xml")));
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
String url = "MyURL";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());
try{
    ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
    Log.d(TAG, "response - " + responseEntity.getBody());

}catch(HttpMessageNotReadableException e){
    Log.d(TAG, "message " + e.getMessage());
}

このコードを実行すると発生するエラーは次のとおりです。

02-11 16:49:28.905: E/AndroidRuntime(5454): FATAL EXCEPTION: Thread-126
02-11 16:49:28.905: E/AndroidRuntime(5454): org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.String]
02-11 16:49:28.905: E/AndroidRuntime(5454):     at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:632)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:473)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:438)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:414)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity.getCategories(RRBCatalogueActivity.java:337)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at com.rounded.rrbcataloguelibrary.RRBCatalogueActivity$7.run(RRBCatalogueActivity.java:395)
02-11 16:49:28.905: E/AndroidRuntime(5454):     at java.lang.Thread.run(Thread.java:856)

エラーは次の行でスローされます。ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

テストするために、これを使用しました:restTemplate.getMessageConverters().add(new StringHttpMessageConverter());メッセージコンバーターから、適切な応答を文字列として取得しました。

何か案は?

4

2 に答える 2

1

メッセージの本文として受け入れヘッダーを設定しようとしているようです。それはおそらくあなたが望むものではありません...

ResponseEntity は、XML シリアル化可能なオブジェクトをラップする必要があります (コンバーター コードを見ると、@Root アノテーションを探しているようです)。とにかく、Spring を使用すると、(一般的に) Accept/content-type ヘッダーを直接設定することを心配する必要はありません。これらは MessageConverters によって設定されるからです。

于 2013-02-11T22:46:55.700 に答える
0

戻り値の型は String 以外である必要があります。SimpleXml が何を望んでいるかはわかりませんが、JaxB を使用している場合は、生成されたクラスになります

于 2013-02-11T22:47:27.527 に答える