6

誰か教えてください 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: java.io.StringReader@628016f7; line: 1, column: 2]
4

4 に答える 4

3

次のように、パラメーターなしのコンストラクターErrorHolderクラスに追加する必要があると思います。

public ErrorHolder(){
   this(null);
}
于 2013-06-12T18:50:21.680 に答える
1

逆シリアル化 (ストリームから Java オブジェクトへの変換) のプロセスは、インターフェイス Serializable を実装していない継承階層の最初のクラスに対して呼び出されるデフォルトのコンストラクターにアクセスします。

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

于 2014-11-14T22:17:37.277 に答える
0

ダミーコンストラクターを追加する必要がありました

public ErrorHolder(){
}
于 2013-06-12T18:52:10.627 に答える