Я надеялся реализовать единственный "ExceptionController" для обрабатывания исключений, которые выдаются в осуществлении методов моих других контроллеров. Я не указал HandlerExceptionResolver в своем контексте приложения так согласно документации API, AnnotationMethodHandlerExceptionResolver должен быть запущен. Я проверил его как таковой в источнике. Итак, почему следующее не работает?
@Controller
public class ExceptionController {
@ExceptionHandler(NullPointerException.class)
public ModelAndView handleNullPointerException(NullPointerException ex) {
// Do some stuff
log.error(logging stuff)
return myModelAndView;
}
}
@Controller
public class AnotherController {
@RequestMapping(value="/nullpointerpath")
public String throwNullPointer() {
throw new NullPointerException();
}
}
Я вижу в журналах отладки, что три обработчика исключений по умолчанию просят относительно обработки исключения, но ничто не сделано, и я вижу, что "DispatcherServlet - не Мог завершить запрос". Сопровождаемый пользователем, отображаемым stacktrace и 500 Внутренних ошибок.
Убедитесь, что ваш обработчик исключений возвращает представление, которое существует / сопоставляется с обработчиком.
Не думаю, что это хороший дизайн. Контроллеры в Spring обрабатывают HTTP-запросы и сопоставляются с URL-адресами. Я не думаю, что «исключение» уместно ни в одну из корзин. Для меня это похоже на неправильное использование Spring.
Исключением является не HTTP-запрос. Вы не сопоставляете исключение с URL-адресом. Поэтому я бы пришел к выводу, что контроллеры не предназначены для обработки как обработчики исключений.
Контроллеры являются частью Spring API, но ваш проект использует их не так, как задумано, поэтому он не работает. Переосмыслите свой дизайн.