【问题标题】:How does Spring MVC handle uncaught exceptions raised in controllers?Spring MVC 如何处理控制器中引发的未捕获异常?
【发布时间】:2016-10-14 20:03:10
【问题描述】:

如果应用程序没有明确提供未捕获的异常处理程序,我需要了解 Spring MVC 如何处理未捕获的异常。多个并发请求都引发未捕获异常的场景是否会影响 Tomcat 的线程池泄漏或挂起?

【问题讨论】:

  • 不,不能。您只会收到 500 错误。
  • @JBNizet 谢谢,所以你的意思是 Spring MVC 确实提供了一个默认的未捕获异常处理程序,它将拦截并提供 500 响应?
  • 没有。如果控制器或通知没有处理异常,它最终会被 DispatcherServlet 的 doXxx() 方法抛出,容器响应 500 错误

标签: spring spring-mvc tomcat threadpool uncaught-exception


【解决方案1】:

你可以使用@ControllerAdvice(more details):

例如:

@ControllerAdvice
public class ControllerExceptionHandler {

    @ExceptionHandler(value = AccessDeniedException.class)
    public ModelAndView accessDeniedError(HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        return new ModelAndView("/403");
    }

    @ExceptionHandler({SQLException.class,DataAccessException.class})
    public ModelAndView databaseError() {
        ....
    }

    ...

}

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多