Prilagođavanje stranica za greške u Spring Boot aplikacijama
Softver nije imun na greške; čak i najpouzdanije aplikacije mogu naići na probleme. Zbog toga je imperativ da svaka aplikacija poseduje mehanizme za upravljanje tim greškama.
Spring Boot, po defaultu, pruža osnovnu „Whitelabel“ stranicu sa greškom, kao deo svoje automatske konfiguracije. Ipak, programeri se obično odlučuju za kreiranje personalizovanih stranica sa greškama, umesto da koriste Whitelabel verziju. U ovom članku istražićemo kako prilagoditi stranice sa greškama u vašim Spring Boot aplikacijama.
Spring Boot „Whitelabel“ stranica sa greškom
Kada Spring Boot aplikacija naiđe na grešku, ona šalje zahtev na URL „/error“. Ukoliko na toj lokaciji nema odgovarajućeg prikaza, prikazuje se standardna „Whitelabel“ stranica sa greškom:
Ova „Whitelabel“ stranica prikazuje datum i vreme nastanka greške, kao i vremensku zonu. Dodatno, uključuje tip greške i njen kod. Na primer, stranica može ukazivati na grešku 404 (stranica nije pronađena), kao što je slučaj kada aplikacija nema definisanu mapu za URL „/products“.
Većina informacija prikazanih na „Whitelabel“ stranici preuzeta je iz specifičnih atributa greške. Spring Boot mehanizam za prikaz grešaka ima pristup sledećim atributima:
greška
: Razlog nastanka greške.vremenska oznaka
: Datum i vreme kada se greška dogodila.status
: Kod statusa greške.izuzetak
: Ime klase osnovnog izuzetka (ako je greška rezultat izuzetka).poruka
: Poruka izuzetka (ako je greška rezultat izuzetka).greške
: Bilo koji rezultat izuzetkaBindingResult
(ako je greška rezultat izuzetka).trag
: Stek praćenje izuzetka (ako je greška rezultat izuzetka).putanja
: URL putanja na kojoj je greška nastala.
Kreiranje stranice sa greškom pomoću Thymeleaf-a
Vaša Spring Boot aplikacija treba da ima stranicu za greške sačuvanu u šablonu „error“. Ekstenzija ovog šablona zavisi od tehnologije koju koristite. Ako ste odabrali Java Server Pages (JSP), ime fajla bi trebalo biti error.jsp
.
Međutim, ovaj primer Spring Boot aplikacije koristi Thymeleaf mehanizam za šablone. Stoga, ime šablona je error.html
. Preporučuje se da šablon za greške postavite u folder sa šablonima, unutar direktorijuma resursa zajedno sa ostalim šablonima.
Sadržaj error.html fajla
<html xmlns:th="http://www.thymeleaf.org"> <head> <title> Greška </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>Došlo je do greške...</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>Čini se da postoji problem sa stranicom koju ste zahtevali (<span th:text="${path}"></span>).</p> <p th:text="${'Statusni kod je ' + status + ', što znači da je stranica ' + error + '.'}"></p> <p th:text="${'Dodatni detalji: ' + message + '.'}"></p> <a class="btn" href="https://wilku.top/home">Nazad na početnu</a> </div> </body> </html>
Prilagođena stranica sa greškom obavlja nekoliko ključnih funkcija. Ona obaveštava korisnika o nastanku greške. Nakon toga, prikazuje HTTP zahtev koji je doveo do greške. Takođe, pruža korisniku statusni kod povezan sa greškom. Ukoliko korisnik nije upoznat sa statusnim kodovima, stranica objašnjava značenje koda putem atributa greške.
Poslednja linija teksta prikazuje poruku u slučaju izuzetka. Veza na kraju stranice omogućava korisniku da se vrati na početnu stranicu. error.html
koristi CSS stilske liste i dve slike za kreiranje sledećeg prikaza:
Održavanje korisničkog iskustva stranice sa greškom
Primarna svrha stranice sa greškom je obaveštavanje korisnika o nastanku greške. Međutim, ova stranica je i dalje deo aplikacije, pa je ključno da bude korisnički orijentisana.
To znači da treba koristiti atribute greške koji na jasan i jednostavan način komuniciraju o grešci. Tako, umesto atributa trag
, koji je složen i sadrži detalje koji nisu relevantni za korisnika, možete koristiti atribut putanja
.
Takođe je važno ne otkrivati previše detalja o unutrašnjem funkcionisanju aplikacije, jer to može ugroziti bezbednost aplikacije.