Выброс NoHandlerFoundException и настройка пользовательской страницы 404 в SpringBoot

Я изучаю Spring всего 7 месяцев. Хотя я использовал только Spring MVC, я хочу настроить пользовательскую страницу 404, выбрасывая исключение NoHandlerFoundException или включив его в сервлете диспетчера. Теперь я изучаю весенний ботинок, может ли кто-нибудь мне объяснить?

Почему бы не попробовать по-старому, как весной? Это должно работать в загрузке, и мне предложили передать исключение таким образом.

Blangero 24.10.2018 11:54

Весной я использовал для отлова 404 not found expection, установив для ThorwExceptionIfNoHandlerFound значение true в dispatcherServlet.xml. Но при загрузке я не могу понять, как правильно поймать исключение 404 not found. Улавливает ли @ExceptionHandler (Exception.class) исключение 404not found?

Sheriff Hussain 25.10.2018 11:26
1
2
2 194
1

Ответы 1

У меня была такая же проблема, я решил ее. Ниже приведены шаги, чтобы решить то же самое.

  1. Создайте класс GlobalExceptionHandler, аннотированный @ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler 
{
    @ExceptionHandler(NoHandlerFoundException.class)
    public String handleNotFoundError(Exception ex) 
    {
        return "redirect:/yourCustom404page";
    }
}
  1. По умолчанию, когда страница / ресурс не существует, контейнер сервлета будет отображать страницу 404 по умолчанию. Если вам нужен настраиваемый ответ 404, вам нужно указать 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>

Другие вопросы по теме