@ExceptionHandler не обрабатывает выданные исключения - PullRequest
9 голосов
/ 20 мая 2010

В моем контроллере есть метод, который будет обрабатывать исключения, генерируемые приложением. Итак, у меня есть такой метод.

@Controller
public class ExceptionController {

    @RequestMapping(value="/error")
    @ExceptionHandler(value={Exception.class, NullPointerException.class})
    public String showError(Exception e, Model model){
        return "tiles:error";
    }
}

И чтобы попробовать I, если это работает, я выкидываю исключение NullPointerException другим методом в контроллере другого метода:

boolean a = true;
if(a){ 
    throw new NullPointerException();
}

После создания исключения оно печатается в JSP, но не вызывает метод showError () (я установил там точку останова, и она никогда не входит). Метод showError () перехватит исключение и покажет разные страницы ошибок в зависимости от типа исключения (хотя теперь он всегда показывает одну и ту же страницу ошибок). Если я перехожу к URL-адресу / ошибке, он показывает страницу с ошибкой, поэтому метод showError () в порядке.

Я использую Spring 3.

В чем может быть проблема?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 20 мая 2010

Если вы посмотрите на ваши журналы, вы, вероятно, увидите это:

java.lang.IllegalStateException: Неподдерживаемый аргумент [org.springframework.ui.Model] для @ExceptionHandler метод

Другими словами, методы @ExceptionHandler не могут объявить параметр Model (см. документы ).

Удалите этот параметр (который вы все равно не используете), и он должен работать как положено.

0 голосов
/ 04 сентября 2014

Если вы хотите обрабатывать исключения глобально (вне вашего контроллера), вы можете использовать аннотированный класс @ControllerAdvice, в который вы поместите аннотированные методы @ExceptionHandler.

см. http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc для примера. И http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html за улучшения, сделанные весной 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...