我正在将Spring Web应用程序从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].....
我怎样才能解决这个问题?
从spring 3.x升级到4.1时,您需要从jackson 1.9.x更改为jackson2.x。在jackson 2.x中,程序包结构从org.codehaus迁移到com.fasterxml
。
如果您的类路径中没有com.fasterxml jackson,则结果将与您完全缺少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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句