为什么我得到org.codehaus.jackson.map.JsonMappingException:没有为类型找到合适的构造函数

use*_*795 6 java rest spring spring-mvc

有人可以告诉我为什么我得到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);

        }
Run Code Online (Sandbox Code Playgroud)

我试图测试错误,所以我应该创建一个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 + '\'' +
                '}';
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我收到以下错误:

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]
Run Code Online (Sandbox Code Playgroud)

mat*_*sev 13

两个选项,要么提供一个默认的无参数构造函数来完成这项工作.但是,对于您的用例,更好的解决方案是由@JsonCreator@JsonProperty提供的恕我直言:

public class ErrorHolder
{
    public String errorMessage;

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

    // getters and setters
 }
Run Code Online (Sandbox Code Playgroud)