Как Spring MVC обрабатывает необработанные исключения, возникающие в контроллерах?

Мне нужно понять, как Spring MVC обрабатывает неперехваченные исключения, если приложение не предоставляет обработчика неперехваченных исключений. Может ли сценарий, в котором несколько одновременных запросов вызывают необработанные исключения, привести к утечке или зависанию пула потоков Tomcat?


person Abhishek Gupta    schedule 14.06.2016    source источник
comment
Нет, не может. Вы просто получите ошибку 500.   -  person JB Nizet    schedule 14.06.2016
comment
@JBNizet Спасибо, так что вы говорите, что Spring MVC предоставляет обработчик исключений Uncaught по умолчанию, который будет перехватывать и предоставлять ответ 500?   -  person Abhishek Gupta    schedule 14.06.2016
comment
Нет. Если контроллер или совет не имеют отношения к исключению, оно заканчивается тем, что вызывается методом doXxx() DispatcherServlet, и контейнер отвечает ошибкой 500.   -  person JB Nizet    schedule 14.06.2016


Ответы (1)


Вы можете использовать @ControllerAdvice(подробнее):

Например:

@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() {
        ....
    }

    ...

}
person Dekart    schedule 14.06.2016