2013-06-12 13 views
6

Qualcuno può dirmi perché sto ricevendo org.codehaus.jackson.map.JsonMappingException: Nessun costruttore adatto trovato per errore di tipo?Perché sto ricevendo org.codehaus.jackson.map.JsonMappingException: Nessun costruttore adatto trovato per il tipo

Ecco la mia chiamata:

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

     } 

che sto cercando di testare l'errore in modo che dovrei creare un oggetto ErrorHolder ma sto ottenendo l'errore;

Ecco la mia classe 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 + '\'' + 
       '}'; 
    } 
} 

Non so perché sto ottenendo il seguente errore:

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] 

risposta

13

due opzioni, o si forniscono un costruttore di default senza argomenti, che fa il lavoro. Tuttavia, per il vostro caso d'uso di una soluzione secondo me più bello è fornita da @JsonCreator e @JsonProperty:

public class ErrorHolder 
{ 
    public String errorMessage; 

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

    // getters and setters 
} 
+0

Questo ha risolto il problema, grazie! –

3

credo che è necessario aggiungere un nessun parametro del costruttore al tuo ErrorHolder classe come questa:

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

avevo bisogno di aggiungere un costruttore fittizio

public ErrorHolder(){ 
} 
0

Il processo di deserializzazione (Conversione di flusso per oggetto Java) accederà costruttore di default che viene chiamato per la prima classe nel gerarchia di ereditarietà che non implementa un'interfaccia serializzabile.

Quindi tutto ciò che è necessario risolvere è un costruttore predefinito (senza argomenti/senza parametri). Questo articolo ti aiuterà a capire meglio: https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html#4539

Problemi correlati