2011-04-20 13 views
7

मैं spring android rest template का उपयोग कर रहा हूं और here दिखाए गए अनुसार जावा क्लास में JSON प्रतिक्रिया को परिवर्तित करने का प्रयास कर रहा हूं।एंड्रॉइड RestClientException: कोई उपयुक्त HttpMessageConverter

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); 

मुझे लगता है कि मैं आवश्यक सब कुछ किया है के रूप में यह दस्तावेज़ में कहा है:

  • मैं अपने classpath में जार निम्नलिखित है

    यहाँ मेरी टुकड़ा काम करने के लिए कोशिश कर रहा है

    • जैक्सन-सब-1.7.6.jar
    • वसंत-android-आराम-टेम्पलेट 1.0.0.M2.jar
  • url वास्तव में एक JSON ऑब्जेक्ट देता है।
  • मेरे Result वर्ग सभी आवश्यक फ़ील्ड

के साथ एक POJO है मूल रूप से मेरी classpath में Jackson dependencies होने यह काम के रूप में यह कहते हैं करने के लिए पर्याप्त होना चाहिए:

MappingJacksonHttpMessageConverter सशर्त जब भरी हुई है आप एक नया RestTemplate उदाहरण बनाते हैं। यदि आपके क्लासपाथ में जैक्सन निर्भरताएं पाई जाती हैं, तो संदेश कनवर्टर स्वचालित रूप से जोड़ा जाएगा और आरईएसटी संचालन में उपयोग के लिए उपलब्ध होगा।

तो मैं यहां क्या खो रहा हूं, मैं क्या गलत कर रहा हूं?

धन्यवाद

पूर्ण अपवाद यहां पाया जा सकता:

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 
+0

यह बहुत ही रोचक है। मुझे जवाब सुनना अच्छा लगेगा। – aykut

उत्तर

2

मैं एंड्रॉयड पर कुछ भी कभी नहीं किया है, लेकिन मैं जानता हूँ कि धर्मान्तरित के साथ सामग्री प्रकार picky रहे हैं। जैक्सन के लिए संदेश निकाय के लिए 'सामग्री-प्रकार: एप्लिकेशन/जेसन' की आवश्यकता है। प्रतिक्रिया पर सभी शीर्षलेखों की जांच करने का प्रयास करें।

+3

वाह यह थोड़ी देर हो गया है और मुझे याद नहीं है कि मैंने इसे ठीक कैसे किया लेकिन यह आपके जैसा सुझाव था, वास्तव में मैंने एप्लिकेशन/जेसन का उपयोग किया :) – dds

+0

मेरे पास एक ही समस्या है, लेकिन मैं सामग्री प्रकार नहीं बदल सकता मेरे एपीआई तृतीय पक्ष एपीआई हैं। सामग्री प्रकार बदलने के अलावा कोई अन्य विकल्प है? –

1

मैंने एक ही अपवाद को पूरा किया है और इसे अभी ठीक कर दिया है।

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

समाधान

मैं इस तरह contentType अद्यतन:

response.setContentType("application/json;charset=utf-8"); 

मूल कारण

सर्वर पर, मैं इस तरह की प्रतिक्रिया की स्थापना की गई थी

0

यहां एक समान स्थिति में मेरे लिए क्या काम किया गया है:

HttpHeaders requestHeaders = new HttpHeaders(); // भेजना मल्टीपार्ट/फॉर्म-डेटा अनुरोध हैडर.सेटकंटेंट टाइप (मीडिया टाइप।MULTIPART_FORM_DATA);

// MultiValueMap धारावाहिक जा रहा आबाद और एक HttpEntity वस्तु में हेडर अनुरोध HttpEntity> requestEntity = नए HttpEntity> (भागों, requestHeaders) के लिए उपयोग करने के लिए;

RestTemplate restTemplate = getRestTemplate(); restTemplate.getMessageConverters()। जोड़ें (नया FormHttpMessageConverter()); restTemplate.getMessageConverters()। जोड़ें (नया मैपिंग जैक्सन 2HttpMessageConverter());

रिटर्न restTemplate.postForObject (यूआरआई, requestEntity, APIResponseUpload.class);

1

मेरे लिए, यह त्रुटि उस वर्ग के लिए फेंक दी गई थी जो किसी निश्चित संपत्ति के लिए स्ट्रिंग के बजाय एनम प्रकार का उपयोग करेगी।

अन्य कारण यह भी हो सकता है कि आप जैक्सन 2 का उपयोग कर रहे हैं। आपको MappingJackson2HttpMessageConverter (MappingJacksonHttpMessageConverter के बजाय) में बदलना चाहिए।

संबंधित मुद्दे