V softwaru se vyskytují chyby, a to i u těch nejpropracovanějších aplikací. Proto by každá aplikace měla mít zavedeny mechanismy pro jejich efektivní řešení.
Spring Boot standardně poskytuje tzv. Whitelabel chybovou stránku, která je součástí jeho automatické konfigurace. Nicméně, vývojáři jsou obvykle motivováni k vytvoření vlastního uživatelského rozhraní pro chybové stavy, které nahradí výchozí Whitelabel stránku. Tento článek vám ukáže, jak si přizpůsobit chybovou stránku ve vašich aplikacích Spring Boot.
Výchozí Whitelabel chybová stránka Spring Boot
Když aplikace Spring Boot narazí na problém, automaticky přesměruje požadavek na URL adresu „/error“. Pokud na této adrese není definováno žádné konkrétní zobrazení, systém automaticky zobrazí výchozí Whitelabel chybovou stránku:
Whitelabel chybová stránka poskytuje základní informace, jako je datum a čas chyby spolu s příslušným časovým pásmem. Dále specifikuje typ chyby a její kód. Na ukázce je vidět, že stránka hlásí chybu 404 (stránka nenalezena), protože ukázková aplikace nemá žádnou definici pro URL „/products“.
Většina informací zobrazených na Whitelabel stránce se získává z interních atributů chyby. Spring Boot chybové zobrazení má přístup k následujícím atributům:
- chyba: popis důvodu chyby.
- časové razítko: datum a čas, kdy chyba nastala.
- status: stavový kód chyby.
- výjimka: název třídy kořenové výjimky (pokud je chyba způsobena výjimkou).
- zpráva: textová zpráva o výjimce (pokud je chyba způsobena výjimkou).
- chyby: výsledky z výjimky BindingResult (pokud je chyba způsobena výjimkou).
- trace: podrobnosti o zásobníkovém trasování výjimek (pokud je chyba způsobena výjimkou).
- cesta: URL adresa, na které došlo k chybě.
Vytvoření vlastní chybové stránky s Thymeleaf
Ve vaší Spring Boot aplikaci by měla být vytvořena samostatná šablona pro chybové stránky, obvykle umístěná ve složce „error“. Přípona tohoto souboru se liší v závislosti na použitém šablonovacím enginu. Například, pokud se rozhodnete pro Java Server Pages (JSP), název souboru by měl být error.jsp.
V tomto příkladu je použita šablonovací technologie Thymeleaf, tudíž je název souboru error.html. Je vhodné umístit šablonu chyb do složky se šablonami, v rámci adresáře zdrojů, společně s ostatními soubory šablon.
Soubor error.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Chyba</title> <link rel="stylesheet" th:href="https://wilku.top/how-to-create-custom-spring-boot-error-pages-with-thymeleaf/@{/css/style.css}"/> </head> <body th:style="'background: url(/images/background1.jpg) no-repeat center center fixed;'"> <div class="container" > <h1>Nastala chyba...</h1> <img th:src="https://wilku.top/how-to-create-custom-spring-boot-error-pages-with-thymeleaf/@{/images/error-icon.png}" width="100px" height="100px" /> <p>Zdá se, že se vyskytl problém se stránkou, kterou jste požadovali (<span th:text="${path}"></span>).</p> <p th:text="${'Stavový kód je ' + status + ', což znamená, že stránka byla ' + error + '.'}"></p> <p th:text="${'Další podrobnosti: ' + message + '.'}"></p> <a class="btn" href="https://wilku.top/home">Zpět na domovskou stránku</a> </div> </body> </html>
Vlastní chybová stránka plní několik zásadních funkcí. Informuje uživatele o výskytu chyby, zobrazuje HTTP požadavek, který chybu vyvolal, a poskytuje stavový kód spojený s chybou. Pro uživatele, kteří stavové kódy neznají, stránka také vysvětluje jejich význam pomocí atributu „error“.
Poslední řádek textu zobrazí uživateli zprávu v případě, že došlo k výjimce. Následně odkaz na konci stránky umožňuje uživateli snadný návrat na domovskou stránku. Šablona error.html využívá CSS styly a dva obrázky pro vytvoření následujícího zobrazení:
Udržujte chybovou stránku uživatelsky přívětivou
Primárním cílem chybové stránky je informovat uživatele o konkrétní chybě, která se stala. I chybová stránka je však stále součástí aplikace, a proto je důležité zajistit, aby byla uživatelsky přívětivá.
To znamená používat atributy chyby tak, aby byla chyba sdělena co nejjednodušším způsobem. Můžete se rozhodnout použít atribut „path“ místo komplexnějšího atributu „trace“, který obsahuje detaily, které pro běžného uživatele nejsou relevantní.
Také je nežádoucí poskytovat náhodnému uživateli příliš detailní informace o vnitřním fungování vaší aplikace, protože by to mohlo představovat bezpečnostní riziko.