मैं spring android rest template का उपयोग कर रहा हूं और जेएसओएन प्रतिक्रिया को जावा क्लास में बदलने की कोशिश कर रहा हूं जैसा कि दिखाया गया है यहां

यहाँ मेरा स्निपेट काम करने की कोशिश कर रहा है:

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

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

  • मेरे क्लासपाथ में मेरे पास निम्नलिखित जार हैं:
    • जैक्सन-ऑल-1.7.6.जार
    • स्प्रिंग-एंड्रॉइड-रेस्ट-टेम्पलेट-1.0.0.M2.jar
  • url वास्तव में एक JSON ऑब्जेक्ट देता है।
  • मेरी Result कक्षा सभी आवश्यक क्षेत्रों के साथ एक POJO है

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

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

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

धन्यवाद

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

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
7
dds 20 अप्रैल 2011, 05:48

4 जवाब

सबसे बढ़िया उत्तर

मैंने एंड्रॉइड पर कभी कुछ नहीं किया है, लेकिन मुझे पता है कि सामग्री-प्रकार के साथ कन्वर्टर्स पसंद करते हैं। जैक्सन को काम करने के लिए संदेश के मुख्य भाग में 'Content-Type: application/json' होना चाहिए। प्रतिक्रिया पर सभी शीर्षलेखों की जांच करने का प्रयास करें।

2
Alex Bitek 24 जून 2015, 09:20

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

मूल कारण

सर्वर पर, मैं इस तरह प्रतिक्रिया सेट कर रहा था:

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

समाधान

मैंने सामग्री को इस तरह अपडेट किया:

response.setContentType("application/json;charset=utf-8");
1
Hugo Dozois 5 अप्रैल 2013, 21:26

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

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

1
Risadinha 9 अक्टूबर 2013, 19:46

यहाँ इसी तरह की स्थिति में मेरे लिए क्या काम किया है:

HttpHeaders requestHeaders = नया HttpHeaders (); // मल्टीपार्ट/फॉर्म-डेटा अनुरोध भेजा जा रहा हैHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

// अनुरोध के लिए उपयोग करने के लिए HttpEntity ऑब्जेक्ट में क्रमबद्ध किए जा रहे MultiValueMap और हेडर को पॉप्युलेट करें HttpEntity> requestEntity = new HttpEntity>(parts, requestHeaders);

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

वापसी बाकी टेम्पलेट। पोस्टफॉरऑब्जेक्ट (यूआरआई, रिक्वेस्टएंटिटी, एपीआईरेस्पॉन्सअपलोड। क्लास);

0
deepwinter 16 अप्रैल 2013, 06:45