#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, а просто отображается как есть.