Есть ли способ создать пользовательскую страницу 404 без web.xml? - PullRequest
0 голосов
/ 20 октября 2018

Так что, в принципе, я могу создать собственную страницу с ошибкой, используя web.xml:

 <error-page>
     <error-code>404</error-code>
     <location>/WEB-INF/pages/error/404.jsp</location>
 </error-page>

Но пока в моем проекте я не использую web.xml и склонен использовать толькоJava-код.

Есть ли правильный и простой способ сделать как в web.xml, но без его использования (создать пользовательскую страницу ошибки)? И если такого способа не существует, будет ли плохим шагом добавить web.xml только для обработки пользовательских страниц ошибок?

Ответы [ 4 ]

0 голосов
/ 21 октября 2018

Вы можете создать EmbeddedServletContainerCustomizer внутри одного из ваших классов конфигурации.Пример

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
    return container -> {
        ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/exceptions/not-found.jsp");

        container.addErrorPages(error404Page);
    };
}
0 голосов
/ 20 октября 2018

Это то, что @ControllerAdvice делает в Spring MVC

@ControllerAdvice
public class GlobalExceptionHandler {
   @ExceptionHandler({NoHandlerFoundException.class})
   @ResponseStatus(value = HttpStatus.NOT_FOUND)
   public void handleNotFound(HttpSession session, HttpServletRequest req, HttpServletResponse httpServletResponse, Exception ex) {
   }
}

Также добавьте эту строку в ваш WebApplicationInitializer

public class CCPMWebAppInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {

      // Create the 'root' Spring application context
      AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
      ....
       DispatcherServlet dispatcherServlet = new DispatcherServlet(rootContext);
       dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
      ...
  }
0 голосов
/ 20 октября 2018

Что ж, как @ MarkA.Fitzgerald упомянул в комментариях:

Сообщество, похоже, считает, что нет способа сделать это в соответствии со stackoverflow.com/a/13450154/1840078.

Итак, я думаю, я могу жить с web.xml, выполняя такие простые вещи, как создание пользовательских страниц ошибок.Я нахожу это простым и чистым вместо того, чтобы пытаться «жестко» кодировать его в Java.

0 голосов
/ 20 октября 2018

Вы можете создать класс Java и контроллер для него.Например, ErrorController использует RequestMapping и создает для него интерфейсную страницу jsp или thymeleaf.

Это хорошая практика https://www.baeldung.com/custom-error-page-spring-mvc просто Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...