Spring Boot: Персонализиране на страницата за грешка на Whitelabel

1. Общ преглед

В тази статия ще разгледаме как да деактивираме и персонализираме страницата за грешки по подразбиране за приложението Spring Boot, тъй като правилното боравене с грешки показва професионализма и качествената работа.

2. Деактивиране на страницата за грешка на Whitelabel

Първо, нека видим как можем да деактивираме страницата за грешка на белия етикет изцяло, като зададем свойството 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 :

Our Engineers are on it

Go Home

Ако запишем този файл в ресурси / шаблонидиректория, тя автоматично ще бъде взета от BasicErrorController на Spring Boot по подразбиране .

Това е всичко, от което се нуждаем, за да покажем нашата персонализирана страница за грешка. С малко стил, сега ще имаме много по-приятно изглеждаща страница за грешка за нашите потребители:

Можем да бъдем по-конкретни, като наименуваме файла с кода на HTTP състоянието, който искаме да използва, напр. Записването на файла като 404.html в ресурси / шаблони / грешка означава, че ще се използва изрично за грешки 404.

3.1. Персонализиран контролер за грешки

Досега ограничението е, че не можем да стартираме потребителска логика, когато възникнат грешки. За да постигнем това, трябва да създадем компонент на контролер за грешки, който ще замени стандартния.

За тази цел трябва да създадем клас, който реализира интерфейса ErrorController и да замени метода getErrorPath () , за да върне персонализиран път за извикване, когато възникне грешка.

Въпреки това, стартирайки версия 2.3.x, Spring Boot отмени този метод и свойството server.error.path трябва да се използва вместо това, за да се посочи персонализирания път.

Но тъй като той все още е част от интерфейса на ErrorController и не е премахнат изцяло, ще трябва да го заменим, иначе компилаторът ще се оплаче. За да заобиколим проблема тук, връщаме 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

По този начин контролерът може да обработва повиквания към / error path.

В handleError () връщаме потребителската страница за грешка, която създадохме по-рано. Ако сега задействаме грешка 404, ще се покаже нашата персонализирана страница.

Нека допълнително подобрим handleError (), за да покажем конкретни страници за грешки за различни типове грешки.

Например, можем да имаме добре проектирани страници, специално за типове грешки 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, например, ще видим страницата за грешка-404.html :

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

С тази информация вече можем да се справим с грешките по-елегантно и да покажем на нашите потребители естетическа страница.

Както винаги, пълният изходен код е достъпен в Github.