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)