2013-06-12 4 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 объект, но я получаю сообщение об ошибке;

Вот мой 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 + '\'' + 
       '}'; 
    } 
} 

Я не знаю, почему я получаю следующее сообщение об ошибке:

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

Два варианта, либо вы обеспечиваете по умолчанию конструктор без аргументов, который делает работу. Тем не менее, для потребительных случае лучше ИМХО решения обеспечивается @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

мне нужно добавить фиктивный конструктору

public ErrorHolder(){ 
} 
0

Процесс десериализации (преобразования потока в объект Java) будет иметь доступ конструктора по умолчанию, который вызывается для первого класса в иерархия наследования, которая не реализует интерфейс Serializable.

Следовательно, все, что вам нужно решить, является конструктором по умолчанию (без аргументов/без параметров). Эта статья поможет вам лучше понять: https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html#4539

Смежные вопросы