Spring Boot: pas de witte label-foutpagina aan

1. Overzicht

In dit artikel gaan we kijken hoe schakel de standaardfoutpagina voor een Spring Boot-toepassing uit en pas deze aan aangezien een juiste foutafhandeling een symbool is van professionaliteit en kwaliteitswerk.

2. Het uitschakelen van de witte label-foutpagina

Laten we eerst eens kijken hoe we de white label-foutpagina volledig kunnen uitschakelen door de server.error.whitelabel.enabled eigendom aan vals:

server.error.whitelabel.enabled = false

Als u dit item toevoegt aan het bestand application.properties, wordt de foutpagina uitgeschakeld en wordt een beknopte pagina weergegeven die afkomstig is van de onderliggende applicatiecontainer, bijvoorbeeld Tomcat.

We kunnen hetzelfde resultaat bereiken door de ErrorMvcAutoConfiguration Boon. We kunnen dit doen door dit item toe te voegen aan het eigenschappenbestand:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration # voor Spring Boot 2.0 # spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

Of door deze annotatie toe te voegen aan de hoofdklasse:

@EnableAutoConfiguration (exclude = {ErrorMvcAutoConfiguration.class})

Alle hierboven genoemde methoden zullen de white label-foutpagina uitschakelen. Dat laat ons met de vraag wie de fout dan eigenlijk afhandelt?

Zoals hierboven vermeld, is dit meestal de onderliggende applicatiecontainer. Het goede is dat we dingen verder kunnen aanpassen door onze aangepaste foutpagina's weer te geven in plaats van alle standaardinstellingen - dit is de focus van de volgende sectie.

3. Aangepaste foutpagina's weergeven

We moeten eerst een aangepaste HTML-foutpagina maken.

We slaan het bestand op als error.html sinds we gebruiken Thymeleaf sjabloon-engine:

Onze ingenieurs zijn ermee bezig

Ga naar huis

Als we dit bestand opslaan in bronnen / sjablonendirectory, wordt deze automatisch opgehaald standaard Spring Boot's BasicErrorController.

Dit is alles wat we nodig hebben om onze aangepaste foutpagina weer te geven. Met wat styling hebben we nu een veel mooiere foutpagina voor onze gebruikers:

We kunnen specifieker zijn door het bestand een naam te geven met de HTTP-statuscode die we willen gebruiken, bijv. het bestand opslaan als 404.html in resources / sjablonen / error betekent dat het expliciet wordt gebruikt voor 404-fouten.

3.1. Een gewoonte ErrorController

De beperking tot nu toe is dat we geen aangepaste logica kunnen uitvoeren wanneer er fouten optreden. Om dat te bereiken, moeten we een foutcontrollerboon maken die de standaardboon zal vervangen.

Voor deze, we moeten een klasse maken die de ErrorController koppel en overschrijven zijn getErrorPath () methode om een ​​aangepast pad te retourneren dat moet worden aangeroepen wanneer er een fout is opgetreden.

Vanaf versie 2.3.x heeft Spring Boot deze methode en de eigenschap server.error.path moet in plaats daarvan worden gebruikt om het aangepaste pad op te geven.

Maar aangezien het nog steeds deel uitmaakt van de ErrorController interface en is niet volledig verwijderd, we zullen het moeten overschrijven, anders klaagt de compiler. Om het probleem hier te omzeilen, keren we terug nul omdat het hoe dan ook wordt genegeerd:

@Controller public class MyErrorController implementeert ErrorController {@RequestMapping ("/ error") public String handleError () {// doe zoiets als logging return "error"; } @Override public String getErrorPath () {return null; }}

In het bovenstaande fragment annoteren we de klas ook met @Controller en maak een toewijzing voor het pad dat is opgegeven als de eigenschap server.error.path:

server.error.path = / fout

Op deze manier kan de controller oproepen naar het /fout pad.

In de handleError (), retourneren we de aangepaste foutpagina die we eerder hebben gemaakt. Als we nu een 404-fout activeren, wordt onze aangepaste pagina weergegeven.

Laten we het handleError () om specifieke foutpagina's weer te geven voor verschillende fouttypen.

We kunnen bijvoorbeeld mooi ontworpen pagina's hebben speciaal voor 404- en 500-fouttypen. Vervolgens kunnen we de HTTP-statuscode van de fout gebruiken om een ​​geschikte foutpagina te bepalen om weer te geven:

@RequestMapping ("/ error") openbare String handleError (verzoek HttpServletRequest) {Objectstatus = request.getAttribute (RequestDispatcher.ERROR_STATUS_CODE); if (status! = null) {Geheel getal statusCode = Geheel getal.valueOf (status.toString ()); if (statusCode == HttpStatus.NOT_FOUND.value ()) {return "error-404"; } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value ()) {return "error-500"; }} retourneer "error"; }

Dan zien we bijvoorbeeld voor een 404-fout het error-404.html bladzijde:

4. Conclusie

Met deze informatie kunnen we fouten nu eleganter afhandelen en onze gebruikers een esthetische pagina laten zien.

Zoals altijd is de volledige broncode beschikbaar op Github.