2013-06-12 33 views
6

टाइप करने के लिए कोई उपयुक्त कन्स्ट्रक्टर नहीं मिला है क्या कोई मुझे बता सकता है कि मुझे org.codehaus.jackson.map.JsonMappingException क्यों मिल रहा है: टाइप त्रुटि के लिए कोई उपयुक्त कन्स्ट्रक्टर नहीं मिला?मुझे org.codehaus.jackson.map.JsonMappingException क्यों मिल रहा है:

यहाँ मेरी कॉल है:

try 
     { 
      String jsonreturn = restTemplate.getForObject("http://" + mRESTServer.getHost() + ":8080/springmvc-rest-secured-test/json/{name}", String.class, vars); 
      LOGGER.debug("return object: " + jsonreturn.toString()); 
     } catch (HttpClientErrorException e) 
     { 
      /** 
      * 
      * If we get a HTTP Exception display the error message 
      */ 

      LOGGER.error("error: " + e.getResponseBodyAsString()); 

      ObjectMapper mapper = new ObjectMapper(); 
      ErrorHolder eh = mapper.readValue(e.getResponseBodyAsString(), ErrorHolder.class); 

      LOGGER.error("error: " + eh.errorMessage); 

     } 

जो मैं तो मैं एक ErrorHolder वस्तु बनाने की जानी चाहिए, लेकिन मैं त्रुटि हो रही है त्रुटि परीक्षण करने के लिए कोशिश कर रहा हूँ;

public class ErrorHolder 
{ 


    public String errorMessage; 

    public ErrorHolder(String errorMessage) 
    { 
     this.errorMessage = errorMessage; 
    } 

    public String getErrorMessage() 
    { 
     return errorMessage; 
    } 

    public void setErrorMessage(String errorMessage) 
    { 
     this.errorMessage = errorMessage; 
    } 

    @Override 
    public String toString() 
    { 
     return "ErrorHolder{" + 
       "errorMessage='" + errorMessage + '\'' + 
       '}'; 
    } 
} 

मैं जानता हूँ कि मैं क्यों निम्न त्रुटि हो रही है न:

यहाँ मेरी ErrorHolder वर्ग है

2013-06-12 14:36:32,138 [main] ERROR Main - error: {"errorMessage":"Uh oh"} 
Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class ErrorHolder]: can not instantiate from JSON object (need to add/enable type information?) 
at [Source: [email protected]; line: 1, column: 2] 

उत्तर

13

दो विकल्प जोड़ने के लिए की जरूरत है, या तो आप एक डिफ़ॉल्ट कोई तर्क निर्माता जो काम करता है प्रदान करते हैं। हालांकि, अपने यूज-केस के लिए एक अच्छे समाधान IMHO @JsonCreator और @JsonProperty द्वारा प्रदान की जाती है:

public class ErrorHolder 
{ 
    public String errorMessage; 

    @JsonCreator 
    public ErrorHolder(@JsonProperty("errorMessage") String errorMessage) 
    { 
     this.errorMessage = errorMessage; 
    } 

    // getters and setters 
} 
+0

इस मुद्दे को ठीक करने के लिए धन्यवाद! –

3

मुझे विश्वास है कि आप करने के लिए एक कोई पैरामीटर निर्माता जोड़ने की जरूरत है अपने ErrorHolder इस तरह की कक्षा:

public ErrorHolder(){ 
    this(null); 
} 
0

अक्रमांकन की प्रक्रिया (रूपांतरण जावा ऑब्जेक्ट के लिए धारा के) डिफ़ॉल्ट निर्माता है कि में प्रथम श्रेणी के लिए कहा जाता है का उपयोग करेंगे विरासत पदानुक्रम जो इंटरफ़ेस Serializable लागू नहीं करता है।

इसलिए आपको जो भी हल करने की आवश्यकता है वह एक डिफ़ॉल्ट कन्स्ट्रक्टर (कोई तर्क/पैरामीटर रहित नहीं है)। यह लेख आपको बेहतर समझने में मदद करेगा: https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html#4539

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