我正在将我的春季网络应用程序从Spring 3.2移至4.1。
在3.2中,以下异常处理程序非常适合从整个应用程序中捕获异常。
@ControllerAdvice
public class RestExceptionProcessor {
@org.springframework.web.bind.annotation.ExceptionHandler(AppException.class)
@ResponseBody
public ErrorInfo handleAppException(AppException ex, HttpServletResponse response) {
ErrorInfo ret = new ErrorInfo(ex.getMessage(), new Date(), ex.getExtras());
logger.error(ex.getMessage());
response.setStatus(ex.getCode().getStatusCode());
return ret;
}
}
但是当我转到4.1时,我得到以下异常堆栈跟踪:
ERROR Failed to invoke @ExceptionHandler method: public com.momoe.handler.RestExceptionProcessor$ErrorInfo com.momoe.handler.RestExceptionProcessor.handleAppException(com.momoe.commons.AppException,javax.servlet.http.HttpServletResponse)
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:134) ~[spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:101) ~[spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:167) ~[spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:71) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126) ~[spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:362) ~[spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE].....
我该如何解决这个问题?
答案 0 :(得分:1)
从spring 3.x升级到4.1时,你需要从jackson 1.9.x更改为jackson 2.x.在jackson 2.x中,包结构已从org.codehaus迁移到com.fasterxml
。
如果您没有在类路径上使用com.fasterxml jackson,结果将与您完全错过杰克逊相同,输出无法找到可接受的代表日志中的消息。如果您正在使用maven,它应该足以包含 jackson-databind ,它将包含 jackson-annotation 和 jackson-core
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>