2013-06-12 3 views
6
에 적합한 생성자가 없습니다.

누군가가 제게 말해 줄 수 있습니까? org.codehaus.jackson.map.JsonMappingException이 발생하는 이유는 무엇입니까? 형식 오류에 대해 적절한 생성자를 찾을 수 없습니까? 여기 org.codehaus.jackson.map.JsonMappingException이 발생하는 이유는 무엇입니까?

내 호출입니다 : 나는 ErrorHolder 개체를 생성해야하지만 오류를 얻고있다, 그래서 내가 오류를 테스트하기 위해 노력하고

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

     } 

;

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

두 가지 옵션을 추가 할 필요하거나 당신은 일을 인수가없는 디폴트 구성을 제공합니다. 그러나 귀하의 사용 사례에 대한 더 좋은 솔루션 이럴 @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

직렬화의 과정 (변환 자바 객체 스트림에)에서 첫 번째 클래스에 대해 호출 기본 생성자를 액세스 할 Serializable 인터페이스를 구현하지 않는 상속 계층 구조.

따라서 해결해야 할 모든 것은 기본 생성자입니다 (args/매개 변수 없음). 이 기사는 더 잘 이해하는 데 도움이됩니다. https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html#4539

관련 문제