Spring Boot: отображение страниц ошибок за пределами Spring MVC

Для приложений, которые не используют Spring MVC, вы можете использовать интерфейс ErrorPageRegistrar для прямой регистрации ErrorPages. Эта абстракция работает непосредственно с нижележащим встроенным контейнером сервлета и работает, даже если у вас нет Spring MVC DispatcherServlet.

@Bean
public ErrorPageRegistrar errorPageRegistrar(){
    return new MyErrorPageRegistrar();
}

// ...

private static class MyErrorPageRegistrar implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
    }

}

Если вы регистрируете ErrorPage с путем, который в конечном итоге обрабатывается фильтром (как это происходит в некоторых не-Spring веб-инфраструктурах, таких как Jersey и Wicket), тогда фильтр должен быть явно зарегистрирован как диспетчер ошибок, как показано в следующем примере:

@Bean
public FilterRegistrationBean myFilter() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new MyFilter());
    ...
    registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
    return registration;
}

Обратите внимание, что по умолчанию FilterRegistrationBean не включает тип диспетчера ERROR.

ПРЕДУПРЕЖДЕНИЕ. При развертывании в контейнере сервлетов Spring Boot использует свой фильтр страниц ошибок, чтобы переслать запрос со статусом ошибки на соответствующую страницу ошибки. Запрос может быть перенаправлен только на правильную страницу ошибки, если ответ еще не был принят. По умолчанию WebSphere Application Server 8.0 и более поздних версий фиксирует ответ при успешном завершении метода обслуживания сервлета. Вы должны отключить это поведение, установив com.ibm.ws.webcontainer.invokeFlushAfterService в false.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки