Spring 3.0 MVC ExceptionHandler - PullRequest
       2

Spring 3.0 MVC ExceptionHandler

4 голосов
/ 29 октября 2010

Я пишу свой обработчик исключений из контроллера Spring MVC, и у меня есть следующий код:

@ExceptionHandler(NullPointerException.class)
      public ModelAndView handleMyException(NullPointerException  exception) {
    System.out.println(exception.getMessage());
        ModelAndView modelAndView = new ModelAndView("/errors/404");
        modelAndView.addObject("message", exception.getMessage());
           return modelAndView;
      } 

и второй:

@ExceptionHandler(ArithmeticException.class)
  public ModelAndView handleException(ArithmeticException exception) {
System.out.println(exception.getMessage());
    ModelAndView modelAndView = new ModelAndView("/errors/404");
    modelAndView.addObject("message", exception.getMessage());
       return modelAndView;
  }

Теперь я пишу свойкод для выброса этих исключений:

В первой строке выдается арифметическое исключение:

System.out.println(100/0);

Выдает правильное исключение, а exception.getMessage () возвращает сообщение "/ by zero".

теперь я пытаюсь выдать второе исключение с помощью:

String test = null;
System.out.println(test.charAt(2));

Возникает исключение, однако exception.getMessage () возвращает значение null, а трассировка стека также равна нулю.

Интересно то, что в log4j logger я вижу полную трассировку стека для обоих исключений.Почему так себя ведет?

Ответы [ 2 ]

3 голосов
/ 29 октября 2010

Как сказал Аффе, ноль - это сообщение. Вы только прикрепляете сообщение к отображаемой модели, поэтому вы не увидите трассировку стека.

Мой совет: планирование нулевого указателя не стоит. NPE - это ошибка программиста, которая, если она представлена ​​пользователю, является дефектом или ошибкой.

Кроме того, основываясь на вашем коде, вы обрабатываете и представляете все исключения одинаково, поэтому у вас может быть обработчик исключений, который просто обрабатывает Throwable или Exception. Это также можно сделать через конфиг или даже в вашем web.xml .

1 голос
/ 29 октября 2010

«null» - это сообщение, которое вы получаете по исключению NullPointer. Это просто Java. Вы не опубликовали ни один код, который пытается манипулировать трассировкой стека, или что-либо, использующее log4j, поэтому не можете сказать, почему это может привести к противоречивым результатам.

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