2013-06-12 12 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); 

     } 

。ここで

は私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

、デシリアライゼーションのプロセス(変換Javaオブジェクトへのストリームの)の最初のクラスのために呼ばれるデフォルトコンストラクタにアクセスしますSerializableインタフェースを実装していない継承階層。

したがって、解決する必要があるのはすべてデフォルトのコンストラクタです(引数なし/パラメータなし)。この記事はあなたの理解を深めさせるのに役立ちます:https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html#4539

関連する問題