spring 4 mvc app - 应用程序级异常处理程序

时间:2015-03-28 13:34:34

标签: java spring spring-mvc

我正在将我的春季网络应用程序从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].....

我该如何解决这个问题?

1 个答案:

答案 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>

这里有更多细节 Spring 4 RestController JSON: characteristics not acceptable according to the request "accept" headers