Spring Boot: Tilpass Whitelabel Error Page

1. Oversikt

I denne artikkelen skal vi se på hvordan deaktivere og tilpasse standardfeilsiden for et Spring Boot-program som riktig feilhåndtering skildrer profesjonalitet og kvalitetsarbeid.

2. Deaktivering av Whitelabel Error Page

La oss først se hvordan vi kan deaktivere feilsiden for den hvite etiketten helt, ved å stille inn server.error.whitelabel.enabled eiendom til falsk:

server.error.whitelabel.enabled = false

Hvis du legger til denne oppføringen i filen application.properties, deaktiveres feilsiden og viser en kortfattet side som stammer fra den underliggende applikasjonsbeholderen, for eksempel Tomcat.

Vi kan oppnå det samme resultatet ved å ekskludere ErrorMvcAutoConfiguration bønne. Vi kan gjøre dette ved å enten legge til denne oppføringen i egenskapsfilen:

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 å legge til denne kommentaren til hovedklassen:

@EnableAutoConfiguration (ekskluder = {ErrorMvcAutoConfiguration.class})

Alle metodene nevnt ovenfor vil deaktivere feilsiden for den hvite etiketten. Det etterlater oss med spørsmålet om hvem som da håndterer feilen?

Vel, som nevnt ovenfor, er det vanligvis den underliggende applikasjonsbeholderen. Det gode er at vi kan tilpasse ting ytterligere ved å vise våre tilpassede feilsider i stedet for alle standardinnstillingene - dette er fokuset i neste avsnitt.

3. Vise tilpassede feilsider

Vi må først lage en tilpasset HTML-feilside.

Vi lagrer filen som error.html siden vi bruker Thymeleaf malmotor:

Ingeniørene våre er på det

Gå hjem

Hvis vi lagrer denne filen i ressurser / malerkatalogen, blir den automatisk hentet som standard Spring Boot's BasicErrorController.

Dette er alt vi trenger for å vise vår tilpassede feilside. Med litt styling har vi nå en mye penere feilside for brukerne våre:

Vi kan være mer spesifikke ved å navngi filen med HTTP-statuskoden vi vil at den skal brukes f.eks. lagrer filen som 404.html i ressurser / maler / feil betyr at den vil bli brukt eksplisitt for 404 feil.

3.1. En skikk ErrorController

Begrensningen så langt er at vi ikke kan kjøre tilpasset logikk når det oppstår feil. For å oppnå det, må vi lage en feilkontrollbønne som skal erstatte den som er standard.

For dette, vi må lage en klasse som implementerer ErrorController grensesnitt og overstyre dens getErrorPath () metode for å returnere en tilpasset bane for å ringe når det oppstod en feil.

Fra og med versjon 2.3.x har Spring Boot avviklet denne metoden og egenskapen server.error.path bør brukes i stedet for å spesifisere den tilpassede banen.

Men siden det fortsatt er en del av ErrorController grensesnitt og ikke er fjernet helt, må vi overstyre det ellers vil kompilatoren klage. For å omgå problemet her, kommer vi tilbake null som det uansett vil bli ignorert:

@Controller public class MyErrorController implementerer ErrorController {@RequestMapping ("/ error") public String handleError () {// gjør noe sånt som logging returnerer "error"; } @ Override public String getErrorPath () {return null; }}

I utdraget ovenfor kommenterer vi også klassen med @Kontrollør og lage en kartlegging for banen som er spesifisert som egenskapen server.error.path:

server.error.path = / feil

På denne måten kan kontrolleren håndtere samtaler til /feil sti.

I handleError (), returnerer vi den tilpassede feilsiden vi opprettet tidligere. Hvis vi utløser en 404-feil nå, er det vår tilpassede side som vises.

La oss ytterligere forbedre handleError () for å vise spesifikke feilsider for forskjellige feiltyper.

For eksempel kan vi ha pent utformede sider spesielt for 404 og 500 feiltyper. Deretter kan vi bruke HTTP-statuskoden til feilen for å bestemme en passende feilside som skal vises:

@RequestMapping ("/ error") offentlig streng handleError (HttpServletRequest forespørsel) {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"; } annet hvis (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value ()) {return "error-500"; }} returner "feil"; }

Så, for en 404-feil, for eksempel, ser vi feil-404.html side:

4. Konklusjon

Med denne informasjonen kan vi nå håndtere feil mer elegant og vise brukerne en estetisk side.

Som alltid er den komplette kildekoden tilgjengelig på Github.