7

ここspring android rest template示すように、JSON 応答を Java クラスに変換しようとしています。

これが仕事をしようとしている私のスニペットです:

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

    //I have already tried to manually setting converters with no luck
    //List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    //messageConverters.add(new MappingJacksonHttpMessageConverter());
    //messageConverters.add(new FormHttpMessageConverter());
    //messageConverters.add(new StringHttpMessageConverter());
    //restTemplate.setMessageConverters(messageConverters);

    Result result = restTemplate.getForObject(url, Result.class);

ドキュメントに記載されているように、必要なすべてのことを行ったと思います。

  • クラスパスに次のjarがあります
    • jackson-all-1.7.6.jar
    • spring-android-rest-template-1.0.0.M2.jar
  • これはurl実際には JSON オブジェクトを返します。
  • Resultのクラスはすべての必須フィールドを持つ POJO です

基本的Jackson dependenciesに、クラスパスに を含めるだけで、次のように機能させることができます。

MappingJacksonHttpMessageConverter は、新しい RestTemplate インスタンスを作成するときに条件付きで読み込まれます。Jackson の依存関係がクラスパスで見つかった場合、メッセージ コンバーターが自動的に追加され、REST 操作で使用できるようになります。

ここで何が欠けているのか、何が間違っているのでしょうか?

ありがとう

完全な例外は次の場所にあります。

04-20 04:25:52.706: ERROR/AndroidRuntime(9638): FATAL EXCEPTION: main
04-20 04:25:52.706: ERROR/AndroidRuntime(9638): java.lang.IllegalStateException: Could not execute method of the activity
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.view.View$1.onClick(View.java:2083)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.view.View.performClick(View.java:2421)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.view.View$PerformClick.run(View.java:8869)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.os.Handler.handleCallback(Handler.java:587)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.os.Looper.loop(Looper.java:143)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.app.ActivityThread.main(ActivityThread.java:5068)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at java.lang.reflect.Method.invokeNative(Native Method)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at java.lang.reflect.Method.invoke(Method.java:521)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at dalvik.system.NativeStart.main(Native Method)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638): Caused by: java.lang.reflect.InvocationTargetException
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at xxx.SamplePageActivity.doRest(SamplePageActivity.java:83)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at java.lang.reflect.Method.invokeNative(Native Method)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at java.lang.reflect.Method.invoke(Method.java:521)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at android.view.View$1.onClick(View.java:2078)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     ... 11 more
04-20 04:25:52.706: ERROR/AndroidRuntime(9638): Caused by: org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [[Lxxx.SamplePageActivity$Result;] and content type [application/json;charset=UTF-8]
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:77)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:449)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:404)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:202)
04-20 04:25:52.706: ERROR/AndroidRuntime(9638):     ... 15 more
4

4 に答える 4

2

私はAndroidで何もしたことがありませんが、変換はContent-Typeでは扱いにくいことを知っています。Jacksonが機能するには、メッセージ本文に「Content-Type:application/json」が必要です。応答のすべてのヘッダーを確認してください。

于 2011-11-11T19:40:14.400 に答える
1

私にとって、このエラーは、特定のプロパティの文字列ではなく列挙型を使用するクラスに対してスローされました。

もう 1 つの原因として、Jackson 2 を使用していることが考えられます。その場合は、MappingJackson2HttpMessageConverter(の代わりにMappingJacksonHttpMessageConverter) に変更する必要があります。

于 2013-10-09T15:46:10.620 に答える
1

私は同じ例外に遭遇し、今それを修正しました。

根本的な原因

サーバーでは、次のように応答を設定していました。

response.setContentType("text/html;charset=utf-8");

解決

次のように contentType を更新しました。

response.setContentType("application/json;charset=utf-8");
于 2013-04-05T17:07:14.377 に答える