Jak tworzyć niestandardowe strony błędów Spring Boot za pomocą Thymeleaf
Oprogramowanie doświadcza błędów. Nawet najlepsze aplikacje napotkają błędy w pewnym momencie. Dlatego każda aplikacja powinna mieć pewne mechanizmy obsługi błędów.
Spring Boot zawiera automatyczną konfigurację obsługi błędów, która obejmuje domyślną stronę błędów Whitelabel. Przewiduje się jednak, że programiści wygenerują własną spersonalizowaną stronę błędu, aby zastąpić standardową wersję Whitelabel. Ten artykuł zawiera wskazówki dotyczące dostosowywania strony błędu do użytku w aplikacjach Spring Boot.
Strona błędu Whitelabel Spring Boot
Po napotkaniu błędu w aplikacji Spring Boot, system automatycznie zażąda punktu końcowego “/error”. W przypadku, gdy ta określona ścieżka nie zawiera żadnych predefiniowanych widoków lub szablonów, strona błędu Whitelabel zostanie wyświetlona jako domyślna odpowiedź dla użytkowników.
Strona błędu White Label zawiera znacznik czasu, w którym wystąpiło niedopatrzenie, a także odpowiednią strefę czasową. Ponadto ujawnia klasyfikację błędu i odpowiadający mu identyfikator. Strona White Label informuje użytkownika, że
Większość danych wyświetlanych na stronie błędu Whitelabel pochodzi z określonych cech błędu. Widok błędu w Spring Boot ma dostęp do wielu takich atrybutów, w tym między innymi:
Termin “błąd” odnosi się do konkretnej przyczyny lub wyjaśnienia niezamierzonego odchylenia od pożądanego wyniku, standardu lub oczekiwania. Oznacza rozbieżność między tym, co było zamierzone, a tym, co faktycznie miało miejsce, wskazując, że istnieje możliwość poprawy w zakresie osiągnięcia optymalnej wydajności lub osiągnięcia celu.
Znacznik czasu odnosi się do konkretnego punktu w czasie, w którym wystąpił błąd, zazwyczaj reprezentowany przez kombinację daty i godziny.
⭐status: kod statusu błędu.
Nazwa klasy wyjątku głównego, jeśli błąd wynika z wyjątku, służy jako desygnator wyjątku, który występuje na najwyższym poziomie w hierarchii wyjątków.
Wartość powiązana z kluczem “message” w słowniku reprezentuje komunikat wyjątku, jeśli błąd wynika z wyjątku.
Błędy walidacji składają się z wszelkich wyników pochodzących z wyjątku BindingResult, w przypadkach, gdy błąd powstaje z powodu wyjątkowego zdarzenia.
Ślad wyjątku odnosi się do zapisu wywołań funkcji prowadzących do błędu, który występuje, gdy wyjątek jest rzucany podczas wykonywania programu.Informacje te mogą być przydatne w identyfikacji źródła problemu i odpowiednim debugowaniu kodu.
Ścieżka URL, na której napotkano błąd, może być dostępna w następujących krokach:
Tworzenie strony błędu za pomocą Thymeleaf
Aby skutecznie zarządzać błędami w aplikacji Spring Boot, zaleca się wyznaczenie pojedynczej strony błędu i przechowywanie jej w określonym szablonie. Nazwa pliku wspomnianego szablonu może się różnić w zależności od wybranej technologii szablonu; na przykład, jeśli zdecydujesz się na Java Server Pages (JSP), plik będzie miał nazwę “error.jsp”.
Wykorzystując silnik szablonów Thymeleaf, ta konkretna aplikacja Spring Boot wykorzystuje plik error.html jako podstawę do renderowania szablonów. Konieczne jest zachowanie spójnego wzorca poprzez umieszczenie szablonu błędu w folderze “template”, który znajduje się pod katalogiem “resources” wraz ze wszystkimi dodatkowymi plikami szablonów.
Plik error.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title> Error</title>
<link rel="stylesheet" th:href="@{/css/style.css}"/>
</head>
<body th:style="'background: url(/images/background1.jpg)
no-repeat center center fixed;'">
<div class="container" >
<h1>An error has occurred...</h1>
<img th:src="@{/images/error-icon.png}"
width="100px" height="100px" />
<p>There seems to be a problem with the page you requested
(<span th:text="${path}"></span>).</p>
<p th:text="${'The status code is ' \\+ status
\\+ ', which means that the page was ' \\+ error \\+ '.'}"></p>
<p th:text="${'Further details: ' \\+ message \\+ '.'}"></p>
<a class="btn" href="/home">Back to home</a>
</div>
</body>
</html>
Dostosowana strona błędu służy wielopłaszczyznowemu celowi. Po pierwsze, potwierdza obecność błędu. Po drugie, pokazuje konkretne żądanie HTTP, które spowodowało błąd. Po trzecie, zapewnia użytkownikowi odpowiedni kod stanu towarzyszący błędowi. W przypadku, gdy użytkownik nie jest zaznajomiony z kodami stanu, strona dodatkowo wyjaśnia ich znaczenie za pomocą atrybutu błędu.
Ostatnia sekcja treści oferuje użytkownikowi powiadomienie w przypadku nieoczekiwanego zdarzenia. Następnie hiperłącze znajdujące się w punkcie kulminacyjnym umożliwia użytkownikowi powrót do głównej strony internetowej poprzez nawigację do niej. Dokument error.html wykorzystuje kaskadowy arkusz stylów (CSS) wraz z dwoma elementami wizualnymi, aby zbudować następujący układ:
Utrzymuj stronę błędu przyjazną dla użytkownika
Głównym celem strony błędu jest przekazanie użytkownikom, że wystąpił określony błąd. Niemniej jednak pozostaje ona elementem samego oprogramowania. W związku z tym upewnienie się, że strona błędu jest łatwa do zrozumienia i nawigacji dla użytkowników, ma zasadnicze znaczenie.
Alternatywnym podejściem byłoby wykorzystanie prostszych atrybutów błędu, które przekazują komunikat o błędzie w bardziej bezpośredni sposób. Na przykład, zamiast stosować skomplikowany atrybut trace, można zdecydować się na atrybut path, ponieważ dostarcza on tylko niezbędnych informacji bez zagłębiania się w niepotrzebne szczegóły.
Ważne jest, aby nie ujawniać poufnych informacji dotyczących zawiłości oprogramowania nieświadomym użytkownikom, ponieważ może to potencjalnie zagrozić bezpieczeństwu i integralności programu.