выбрасывая NoHandlerFoundException и настраивая пользовательскую страницу 404 в SpringBoot - PullRequest
0 голосов
/ 23 октября 2018

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

1 Ответ

0 голосов
/ 01 сентября 2019

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

  1. Создайте класс GlobalExceptionHandler с пометкой @ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler 
{
    @ExceptionHandler(NoHandlerFoundException.class)
    public String handleNotFoundError(Exception ex) 
    {
        return "redirect:/yourCustom404page";
    }
}
По умолчанию, когда страница / ресурс не существует, контейнер сервлета выдаст страницу 404 по умолчанию.Если вы хотите получить пользовательский ответ 404, вам нужно указать DispatcherServlet, чтобы он выдал исключение, если обработчик не найден.Мы можем сделать это, установив для параметра инициализации сервлета throwExceptionIfNoHandlerFound значение true

, чтобы добиться этого

a.Spring-boot
spring.resources.add-mappings=false в вашем application.properties или файле yaml.

b.Если конфигурация на основе Spring-MVC Java - это

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...