Я изучаю Spring всего 7 месяцев. Хотя я использовал только Spring MVC, я хочу настроить пользовательскую страницу 404, выбрасывая исключение NoHandlerFoundException или включив его в сервлете диспетчера. Теперь я изучаю весенний ботинок, может ли кто-нибудь мне объяснить?
Весной я использовал для отлова 404 not found expection, установив для ThorwExceptionIfNoHandlerFound значение true в dispatcherServlet.xml. Но при загрузке я не могу понять, как правильно поймать исключение 404 not found. Улавливает ли @ExceptionHandler (Exception.class) исключение 404not found?
У меня была такая же проблема, я решил ее. Ниже приведены шаги, чтобы решить то же самое.
GlobalExceptionHandler, аннотированный @ControllerAdvice@ControllerAdvice
public class GlobalExceptionHandler
{
@ExceptionHandler(NoHandlerFoundException.class)
public String handleNotFoundError(Exception ex)
{
return "redirect:/yourCustom404page";
}
}
DispatcherServlet, чтобы он генерировал исключение, если обработчик не найден. Мы можем сделать это, установив для параметра инициализации сервлета throwExceptionIfNoHandlerFound значение true.для этого
а. В пружинной загрузке spring.resources.add-mappings=false в файле application.properties или yaml.
б. Если конфигурация на основе Java Spring-mvc
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
...
@Override
protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext)
{
final DispatcherServlet servlet = (DispatcherServlet) super.createDispatcherServlet(servletAppContext);
servlet.setThrowExceptionIfNoHandlerFound(true);
return servlet;
}
}
c. если конфигурация на основе Spring-mvc xml, инициализируйте сервлет диспетчера следующим образом
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Почему бы не попробовать по-старому, как весной? Это должно работать в загрузке, и мне предложили передать исключение таким образом.