Рубрики
Без рубрики

Весенняя загрузка: Настройка Страницы с ошибкой Белой Метки

Узнайте, как настроить страницу ошибок по умолчанию в приложении Spring Boot.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы рассмотрим, как отключить и настроить страницу ошибок по умолчанию для приложения Spring Boot , поскольку правильная обработка ошибок свидетельствует о профессионализме и качестве работы.

2. Отключение страницы с ошибкой белой метки

Во-первых, давайте посмотрим, как мы можем полностью отключить страницу ошибок с белой меткой, установив для свойства server.error.whitelabel.enabled значение false:

server.error.whitelabel.enabled=false

Добавление этой записи в файл application.properties отключит страницу с ошибкой и отобразит краткую страницу, созданную из базового контейнера приложения, например Tomcat.

Мы можем достичь того же результата, исключив ErrorMvcAutoConfiguration компонент. Мы можем сделать это, либо добавив эту запись в файл свойств:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration

#for Spring Boot 2.0
#spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

Или добавив эту аннотацию в основной класс:

@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})

Все методы, упомянутые выше, отключат страницу ошибок с белой меткой. Это оставляет нас перед вопросом о том, кто же тогда на самом деле обрабатывает ошибку?

Ну, как упоминалось выше, обычно это базовый контейнер приложения. Хорошо то, что мы можем дополнительно настраивать вещи, показывая наши пользовательские страницы ошибок вместо всех значений по умолчанию – это основное внимание в следующем разделе.

3. Отображение Пользовательских Страниц Ошибок

Сначала нам нужно создать пользовательскую страницу ошибок HTML.

Мы сохраним файл как error.html так как мы используем Thymeleaf механизм шаблонов:





Something went wrong!

Our Engineers are on it

Go Home

Если мы сохраним этот файл в каталоге ресурсы/шаблоны , он будет автоматически подхвачен контроллером BasicErrorController весенней загрузки по умолчанию .

Это все, что нам нужно для отображения нашей пользовательской страницы ошибок. С некоторой стилизацией у нас теперь будет гораздо более приятная страница ошибок для наших пользователей:

Страница пользовательской ошибки весенней загрузки

Мы можем быть более конкретными, назвав файл кодом состояния HTTP, который мы хотим использовать, например, сохранив файл как 404.html в ресурсы/шаблоны/ошибка означает, что он будет явно использоваться для 404 ошибок.

3.1. Пользовательский контроллер ошибок

Ограничение до сих пор заключается в том, что мы не можем запускать пользовательскую логику при возникновении ошибок. Чтобы достичь этого, мы должны создать компонент контроллера ошибок, который заменит компонент по умолчанию.

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

Однако, начиная с версии 2.3.x, Spring Boot устарел этот метод, и вместо этого для указания пользовательского пути следует использовать свойство server.error.path .

Но поскольку он все еще является частью интерфейса Контроллера ошибок и не был удален полностью, нам нужно будет переопределить его, иначе компилятор пожалуется. Чтобы обойти проблему здесь, мы возвращаем null , так как это в любом случае будет проигнорировано:

@Controller
public class MyErrorController implements ErrorController  {

    @RequestMapping("/error")
    public String handleError() {
        //do something like logging
        return "error";
    }

    @Override
    public String getErrorPath() {
        return null;
    }
}

В приведенном выше фрагменте мы также аннотируем класс с помощью @Controller и создаем сопоставление для пути, указанного в качестве свойства server.error.path:

server.error.path=/error

Таким образом, контроллер может обрабатывать вызовы по пути /ошибка .

В HandleError () мы возвращаем пользовательскую страницу ошибок , созданную ранее. Если мы сейчас вызовем ошибку 404, то будет отображена наша пользовательская страница.

Давайте еще больше укрепим Ошибка управления() для отображения определенных страниц ошибок для различных типов ошибок.

Например, у нас могут быть красиво оформленные страницы, специально предназначенные для 404 и 500 типов ошибок. Затем мы можем использовать код состояния HTTP ошибки, чтобы определить подходящую страницу ошибки для отображения:

@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
    Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
    
    if (status != null) {
        Integer statusCode = Integer.valueOf(status.toString());
    
        if(statusCode == HttpStatus.NOT_FOUND.value()) {
            return "error-404";
        }
        else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
            return "error-500";
        }
    }
    return "error";
}

Затем, например, для ошибки 404 мы увидим error-404.html страница:

4. Заключение

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

Как всегда, полный исходный код доступен на Github .