Spring Boot: Tilpas whitelabel-fejlsiden

1. Oversigt

I denne artikel skal vi se på, hvordan man gør det deaktivere og tilpasse standardfejlsiden til et Spring Boot-program da korrekt fejlhåndtering skildrer professionalisme og kvalitetsarbejde.

2. Deaktivering af whitelabel-fejlsiden

Lad os først se, hvordan vi helt kan deaktivere den hvide etiketfejlside ved at indstille server.error.whitelabel.enabled ejendom til falsk:

server.error.whitelabel.enabled = false

Tilføjelse af denne post til filen application.properties deaktiverer fejlsiden og viser en kortfattet side, der stammer fra den underliggende applikationsbeholder, f.eks. Tomcat.

Vi kan opnå det samme resultat ved at udelukke FejlMvcAutoConfiguration bønne. Vi kan gøre dette ved enten at tilføje denne post til egenskabsfilen:

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

Eller ved at tilføje denne kommentar til hovedklassen:

@EnableAutoConfiguration (ekskluder = {ErrorMvcAutoConfiguration.class})

Alle ovennævnte metoder deaktiverer siden med hvid etiketfejl. Det efterlader os med spørgsmålet om, hvem der faktisk håndterer fejlen?

Som nævnt ovenfor er det normalt den underliggende applikationsbeholder. Det gode er, at vi yderligere kan tilpasse ting ved at vise vores brugerdefinerede fejlsider i stedet for alle standardindstillingerne - dette er fokus i det næste afsnit.

3. Visning af brugerdefinerede fejlsider

Vi skal først oprette en brugerdefineret HTML-fejlside.

Vi gemmer filen som error.html da vi bruger Thymeleaf skabelonmotor:

Vores ingeniører er på det

Gå hjem

Hvis vi gemmer denne fil i ressourcer / skabelonerbibliotek, bliver det automatisk afhentet som standard Spring Boot's BasicErrorController.

Dette er alt, hvad vi har brug for for at få vist vores side med brugerdefinerede fejl. Med en vis styling har vi nu en meget pænere fejlside til vores brugere:

Vi kan være mere specifikke ved at navngive filen med den HTTP-statuskode, vi vil have den brugt f.eks. gemmer filen som 404.html i ressourcer / skabeloner / fejl betyder, at det vil blive brugt eksplicit til 404 fejl.

3.1. En brugerdefineret ErrorController

Begrænsningen indtil videre er, at vi ikke kan køre brugerdefineret logik, når der opstår fejl. For at opnå dette er vi nødt til at oprette en fejlcontrollerbønne, der erstatter den standard.

For det, vi er nødt til at oprette en klasse, der implementerer ErrorController interface og tilsidesætte dens getErrorPath () metode til at returnere en brugerdefineret sti til opkald, når der opstod en fejl.

Fra og med version 2.3.x har Spring Boot udfaset denne metode og ejendommen server.error.path skal bruges i stedet for at specificere den brugerdefinerede sti.

Men da det stadig er en del af ErrorController interface og ikke er blevet fjernet helt, bliver vi nødt til at tilsidesætte det ellers vil compileren klage. For at omgå problemet her vender vi tilbage nul da det alligevel vil blive ignoreret:

@Controller public class MyErrorController implementerer ErrorController {@RequestMapping ("/ error") public String handleError () {// gør noget som at logge returnerer "error"; } @ Override public String getErrorPath () {return null; }}

I uddraget ovenfor kommenterer vi også klassen med @Kontrol og opret en kortlægning for den sti, der er angivet som egenskaben server.error.path:

server.error.path = / fejl

På denne måde kan controlleren håndtere opkald til /fejl sti.

I handleError (), returnerer vi den brugerdefinerede fejlside, vi oprettede tidligere. Hvis vi udløser en 404-fejl nu, er det vores brugerdefinerede side, der vises.

Lad os yderligere forbedre handleError () for at få vist specifikke fejlsider for forskellige fejltyper.

For eksempel kan vi have pænt designede sider specifikt til 404 og 500 fejltyper. Derefter kan vi bruge HTTP-statuskoden for fejlen til at bestemme en passende fejlside, der skal vises:

@RequestMapping ("/ error") offentlig streng handleError (HttpServletRequest anmodning) {Objekt status = request.getAttribute (RequestDispatcher.ERROR_STATUS_CODE); if (status! = null) {Integer statusCode = Integer.valueOf (status.toString ()); hvis (statusCode == HttpStatus.NOT_FOUND.value ()) {return "error-404"; } ellers hvis (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value ()) {return "error-500"; }} returner "fejl"; }

Derefter ser vi for eksempel en 404-fejl fejl-404.html side:

4. Konklusion

Med disse oplysninger kan vi nu håndtere fejl mere elegant og vise vores brugere en æstetisk side.

Som altid er den komplette kildekode tilgængelig på Github.