Spring Boot: веб-приложения с Spring WebFlux, обработка ошибок

Spring Boot предоставляет WebExceptionHandler, который обрабатывает все ошибки разумным способом. Его позиция в порядке обработки находится непосредственно перед обработчиками, предоставленными WebFlux, которые считаются последними. Для машинных клиентов он генерирует ответ JSON с подробной информацией об ошибке, статусе HTTP и сообщении об исключении. Для клиентов браузера есть обработчик ошибок "whitelabel", который отображает те же данные в формате HTML. Вы также можете предоставить свои собственные шаблоны HTML для отображения ошибок.

Первый шаг к настройке этой функции часто включает использование существующего механизма, но замену или увеличение содержания ошибки. Для этого вы можете добавить компонент типа ErrorAttributes.

Чтобы изменить поведение обработки ошибок, вы можете реализовать ErrorWebExceptionHandler и зарегистрировать определение компонента этого типа. Поскольку WebExceptionHandler является довольно низкоуровневым, Spring Boot также предоставляет удобный AbstractErrorWebExceptionHandler, позволяющий обрабатывать ошибки функциональным способом WebFlux, как показано в следующем примере:

public class CustomErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {

    // Определяем конструктор здесь

    @Override
    protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {

        return RouterFunctions
                .route(aPredicate, aHandler)
                .andRoute(anotherPredicate, anotherHandler);
    }

}

Для более полной картины вы также можете напрямую создать подкласс DefaultErrorWebExceptionHandler и переопределить определенные методы.

Пользовательские страницы ошибок

Если вы хотите отобразить пользовательскую страницу ошибок HTML для данного кода состояния, вы можете добавить файл в папку /error. Страницы ошибок могут быть либо статическим HTML (то есть добавленным в любую из папок статического ресурса), либо созданным с помощью шаблонов. Имя файла должно быть точным кодом состояния или последовательной маской.

Например, чтобы отобразить 404 в статический HTML-файл, структура вашей папки будет выглядеть следующим образом:

src/
 +- main/
     +- java/
     |   + <исходный код>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- <другие публичные ассеты>

Чтобы отобразить все ошибки 5xx с помощью Mustache шаблона, структура вашей папки будет выглядеть следующим образом:

src/
 +- main/
     +- java/
     |   + <исходный код>
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.mustache
             +- <другие шаблоны>


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


Комментарии

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

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

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

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