Hoe je aangepaste Spring Boot foutpagina's maakt met Thymeleaf
Software krijgt te maken met fouten. Zelfs de beste applicaties zullen op een bepaald moment fouten tegenkomen. Daarom moet elke applicatie een aantal mechanismen voor foutafhandeling hebben.
Spring Boot bevat een automatische configuratie voor het afhandelen van fouten, waaronder een standaard Whitelabel foutpagina. Er wordt echter verwacht dat ontwikkelaars hun eigen gepersonaliseerde foutpagina zullen genereren om de standaard Whitelabel versie te vervangen. Dit artikel biedt richtlijnen voor het aanpassen van de foutpagina voor gebruik in Spring Boot applicaties.
Spring Boot’s Whitelabel Error Page
Bij het tegenkomen van een fout in een Spring Boot applicatie, zal het systeem automatisch het “/error” endpoint opvragen. In het geval dat dit gespecificeerde pad geen voorgedefinieerde weergaven of sjablonen bevat, wordt de Whitelabel foutpagina weergegeven als standaardreactie voor gebruikers.
De White Label Error Page toont de tijdstempel van wanneer de fout optrad, evenals de relevante tijdzone. Bovendien wordt de classificatie van de fout en de bijbehorende identifier weergegeven. De White Label pagina informeert de gebruiker dat
De meeste gegevens die worden weergegeven op de Whitelabel foutpagina zijn afgeleid van bepaalde foutkenmerken. De foutweergave in Spring Boot heeft toegang tot een verscheidenheid van dergelijke kenmerken, met inbegrip van maar niet beperkt tot:
De term “fout” verwijst naar een specifieke oorzaak of verklaring achter een onbedoelde afwijking van een gewenst resultaat, standaard of verwachting. Het duidt op een discrepantie tussen wat de bedoeling was en wat er werkelijk gebeurde, wat aangeeft dat er ruimte is voor verbetering bij het bereiken van optimale prestaties of het bereiken van een doel.
De tijdstempel verwijst naar het specifieke tijdstip waarop een fout plaatsvindt, meestal weergegeven door een combinatie van datum en tijd.
⭐status: de foutstatuscode.
De classnaam van de rootuitzondering, als de fout het gevolg is van een uitzondering, dient als aanduiding voor de uitzondering die op het hoogste niveau in de hiërarchie van uitzonderingen voorkomt.
De waarde behorend bij de sleutel “message” in het woordenboek vertegenwoordigt het uitzonderingsbericht als de fout het gevolg is van een uitzondering.
De validatiefouten bestaan uit alle uitkomsten die zijn afgeleid van een BindingResult-uitzondering, in gevallen waarin de fout het gevolg is van een uitzonderlijke gebeurtenis.
De exception trace verwijst naar het record van functieaanroepen die leiden tot een fout, die optreedt wanneer een uitzondering wordt gegooid tijdens de uitvoering van het programma.Deze informatie kan nuttig zijn om de bron van het probleem te identificeren en de code dienovereenkomstig te debuggen.
Het URL-pad waarop de fout zich voordoet kan via de volgende stappen worden opgevraagd:
Een foutpagina maken met Thymeleaf
Om fouten in uw Spring Boot-applicatie effectief te beheren, is het aanbevolen dat u één enkele foutpagina aanwijst en deze opslaat in een specifiek sjabloon. De bestandsnaam van dit sjabloon kan verschillen afhankelijk van de gekozen sjabloontechnologie; als je bijvoorbeeld kiest voor Java Server Pages (JSP), dan zou het bestand “error.jsp” heten.
Met de Thymeleaf template engine gebruikt deze specifieke Spring Boot toepassing het bestand error.html als basis voor het renderen van templates. Het is noodzakelijk om een consistent patroon te behouden door het foutsjabloon in de map “template” te plaatsen, die zich onder de map “resources” bevindt naast al uw andere sjabloonbestanden.
Het bestand 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>
De aangepaste foutpagina dient een veelzijdig doel. Ten eerste bevestigt het de aanwezigheid van een fout. Ten tweede toont het het specifieke HTTP-verzoek dat de fout veroorzaakte. Ten derde geeft het de gebruiker de bijbehorende statuscode die bij de fout hoort. Als de gebruiker niet bekend is met statuscodes, verduidelijkt de pagina de betekenis ervan door middel van het foutkenmerk.
Het afsluitende deel van de inhoud biedt de gebruiker een melding in het geval van een onverwachte gebeurtenis. Vervolgens stelt de hyperlink op het eindpunt de gebruiker in staat terug te keren naar de hoofdpagina door daarheen te navigeren. Het error.html document gebruikt een Cascading Style Sheet (CSS) samen met twee visuele elementen om de volgende lay-out te construeren:
Houd uw foutpagina gebruikersvriendelijk
Het hoofddoel van een foutpagina is gebruikers duidelijk te maken dat er een bepaalde fout is opgetreden. Toch blijft het een onderdeel van de software zelf. Daarom is het essentieel dat de foutpagina voor gebruikers gemakkelijk te begrijpen en te navigeren is.
Een alternatieve aanpak zou zijn om eenvoudigere foutattributen te gebruiken die de foutmelding op een eenvoudigere manier overbrengen. Bijvoorbeeld, in plaats van het ingewikkelde trace attribuut te gebruiken, zou men kunnen kiezen voor het path attribuut, omdat dit alleen de essentiële informatie geeft die nodig is zonder in onnodige details te duiken.
Het is belangrijk om geen gevoelige informatie over de fijne kneepjes van je software prijs te geven aan onwetende gebruikers, omdat dit de veiligheid en integriteit van het programma in gevaar kan brengen.