2012-11-28 8 views
8

मैं के साथ डेटा भेजने के लिए Spring for Android rest client का उपयोग करने का प्रयास कर रहा हूं, ताकि जेसन डेटा बनाने और विश्लेषण करने से बच सकें।कोई उपयुक्त HttpMessageConverter पुन: क्लाइंट अनुरोध निष्पादित करने का प्रयास करते समय

से

उनके manual वे निम्न विधि है:

restTemplate.postForObject(url, m, String.class) 

के बाद विधि कहा जाता है मैं निम्न अपवाद प्राप्त करें:

No suitable HttpMessageConverter found when trying to execute restclient request 

मेरे गतिविधि कोड स्निपेट है:

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
Message m = new Message(); 
m.setLibrary("1"); 
m.setPassword("1395"); 
m.setUserName("1395"); 
String result = restTemplate.postForObject(url, m, String.class); 

और संदेश वस्तु है:

public class Message { 
    private String UserName, Password, Library; 

    public String getUserName() { 
     return UserName; 
    } 

    public void setUserName(String userName) { 
     UserName = userName; 
    } 

    public String getPassword() { 
     return Password; 
    } 

    public void setPassword(String password) { 
     Password = password; 
    } 

    public String getLibrary() { 
     return Library; 
    } 

    public void setLibrary(String library) { 
     Library = library; 
    } 
} 

यह convert the Message object to JSON क्यों नहीं हो सकता है?

+0

आपके द्वारा जोड़े गए एक 'HttpMessageConverter '? –

+0

restTemplate.getMessageConverters()। जोड़ें (नया HttpMessageConverter ()) मुझे इसे इस तरह से जोड़ने की आवश्यकता है? – meh

उत्तर

6

ऐसा लगता है कि आपने Message-विशिष्ट HttpMessageConverter नहीं जोड़ा है। HttpMessageConverter एक interface है। आपको HttpMessageConverter<Message> लागू करने वाली कक्षा बनाने की आवश्यकता है और उस श्रेणी का उदाहरण RestTemplate पर restTemplate.getMessageConverters().add(new MyMessageConverter());

+0

ठीक है, मुझे अब मिल गया है, लेकिन मैपिंग जैक्सनहट्पमेसेज कनवर्टर() के लिए क्या है? क्या वस्तु को बदलने के लिए उपयोग नहीं किया जाता है? – meh

+0

चूंकि 'मैपिंग जैक्सनहटपमेसेज कनवर्टर' 'सारस्ट्रेट मैसेज कनवर्टर ' बढ़ाता है, मुझे लगता है कि 'RestTemplate' केवल स्पष्ट रूप से' ऑब्जेक्ट 'उदाहरणों के लिए इसका उपयोग करेगा। हालांकि, मैं इसके बारे में परिचित नहीं हूं। जैक्सन या जीसन का स्पष्ट रूप से उपयोग करके अपने आप को कार्यान्वित करने का प्रयास करें और देखें कि यह काम करता है या नहीं, फिर यह पता लगाने की कोशिश करें कि 'मैपिंग जैक्सनहट्पमेसेज कनवर्टर' का उपयोग कैसे करें। वैसे भी मेरा सुझाव है। –

+0

ठीक है, मैं इसके साथ जाऊंगा, मैं आपको उत्तर के लिए +1 दे रहा हूं, अजीब चीज यह है कि उनके संदर्भ पुस्तिका से उनके पास एक साधारण वस्तु है और उनके पास कोई अन्य HttpMessageConverter लागू किए बिना कुछ और नहीं है। – meh

1

आपका कोड सामान्य रूप से ठीक दिखता है। शायद यह एक संस्करण समस्या है। जांचें कि क्या आप जैक्सन 2 का उपयोग करते हैं, और यदि ऐसा है, तो कनवर्टर को MappingJackson2HttpMessageConverter पर बदलें।

HttpMessageConverter<Message> जैसे कुछ की आवश्यकता नहीं है।

एक तरफ नोड पर: जावा सम्मेलन परिवर्तनीय नामों के लिए कम आवरण का उपयोग करना है। तो, यह अन्य जावा डेवलपर्स के लिए अधिक पठनीय होगा:

private String library; 

public void setLibrary(String library) { 
    this.library = library; 
} 
5

ऐसा कुछ अलग-अलग कारण हो सकते हैं कि ऐसा क्यों हो सकता है। मेरे मामले में, मेरे पास RestTemplate पहले से ही वायर्ड था, लेकिन अभी भी यह त्रुटि मिली है। पता चला है, मैं पर "जैक्सन-DataBind" निर्भरता को जोड़ने के लिए किया था:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
</dependency> 
संबंधित मुद्दे