Почему строка не добавляется в свойство с помощью Model.AddObject?

#spring #exception

Вопрос:

Я создал @ControllerAdvice для обработки исключения BindException:

 @ControllerAdvice
class globalControllerAdvice {

    @ExceptionHandler(BindException.class)
    public ModelAndView handleMyException(HttpServletRequest req, Exception e) {

        ModelAndView model = new ModelAndView();
        model.addObject("myerror",e.getErrCode());
        model.addObject("message",e.getMessage());
        model.addObject("exception","bind exception");
        model.setViewName("error");

        return model;
    }
}

 

И создал error.html :

 <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>


  <title>Getting Started: Handing Form Submission</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


  <style>
table td{
vertical-align:top;
border:solid 1px #888;
padding:10px;
}

    </style>
</head>
<body>
<h1>Error Page</h1>
<table>

  <tr>
    <td>Error</td>
    <td th:text="${myerror}"/>
  </tr>
  <tr>
    <td>Message</td>
    <td th:text="${message}"/>
  </tr>
  <tr>
    <td>Exception</td>
    <td th:text="${exception}"/>
  </tr>

</table>
</body>
</html>
 

И при выполнении, когда я специально ошибаюсь, страница отображается нормально,но свойства не заполнены .То есть создается таблица, но текст "${myerror}" , "${message}" , "${exception}" не заполняется e.getErrCode() , e.getMessage() ,
"bind exception" . Кто-нибудь может сказать мне, в чем проблема? Спасибо

Комментарии:

1. Действительно ли это решается с помощью thymeleaf или статической страницы (я подозреваю последнее).

2. Работает ли ваш совет? Добавьте строку в исключение handleMyException для печати в консоль или журнал или используйте точку останова, чтобы посмотреть, выполняется ли там ваш код вообще.

3. @GonenI Я Да, я добавил строку и действительно не вхожу в эту функцию. И почему это так?

4. @M. Deinum Похоже, что вы правы, но почему это так?

5. Этот файл должен быть в src/main/resources/templates , если вы его разместили, src/main/resources/static он будет рассматриваться как страница с ошибкой по умолчанию и не отображается Thymeleaf, а просто отображается как есть.