Spring Boot: Passen Sie die Whitelabel-Fehlerseite an

1. Übersicht

In diesem Artikel erfahren Sie, wie Sie die Standardfehlerseite für eine Spring Boot-Anwendung deaktivieren und anpassen, da die ordnungsgemäße Fehlerbehandlung Professionalität und Qualitätsarbeit darstellt.

2. Deaktivieren der Whitelabel-Fehlerseite

Lassen Sie uns zunächst sehen, wie wir die White-Label-Fehlerseite vollständig deaktivieren können, indem Sie die Eigenschaft server.error.whitelabel.enabled auf false setzen:

server.error.whitelabel.enabled=false

Durch Hinzufügen dieses Eintrags zur Datei application.properties wird die Fehlerseite deaktiviert und eine übersichtliche Seite angezeigt, die aus dem zugrunde liegenden Anwendungscontainer stammt, z. B. Tomcat.

Wir können das gleiche Ergebnis erzielen, indem wir die ErrorMvcAutoConfiguration- Bean ausschließen. Wir können dies tun, indem wir entweder diesen Eintrag zur Eigenschaftendatei hinzufügen:

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

Oder indem Sie diese Anmerkung zur Hauptklasse hinzufügen:

@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})

Alle oben genannten Methoden deaktivieren die White-Label-Fehlerseite. Das lässt uns die Frage offen, wer dann tatsächlich den Fehler behandelt.

Nun, wie oben erwähnt, ist es normalerweise der zugrunde liegende Anwendungscontainer. Das Gute ist, dass wir die Dinge weiter anpassen können, indem wir unsere benutzerdefinierten Fehlerseiten anstelle aller Standardeinstellungen anzeigen - dies ist der Schwerpunkt des nächsten Abschnitts.

3. Anzeigen von benutzerdefinierten Fehlerseiten

Wir müssen zuerst eine benutzerdefinierte HTML-Fehlerseite erstellen.

Wir speichern die Datei als error.html, da wir die Thymeleaf- Vorlagen-Engine verwenden:

Our Engineers are on it

Go Home

Wenn wir diese Datei in Ressourcen / Vorlagen speichernVerzeichnis, es wird automatisch vom BasicErrorController des Standard-Spring Boot übernommen .

Dies ist alles, was wir brauchen, um unsere benutzerdefinierte Fehlerseite anzuzeigen. Mit etwas Styling haben wir jetzt eine viel besser aussehende Fehlerseite für unsere Benutzer:

Wir können genauer sein, indem wir die Datei mit dem gewünschten HTTP-Statuscode benennen, z. B. wenn die Datei als 404.html in resources / templates / error gespeichert wird, bedeutet dies, dass sie explizit für 404-Fehler verwendet wird.

3.1. Ein benutzerdefinierter Fehlercontroller

Die bisherige Einschränkung besteht darin, dass wir keine benutzerdefinierte Logik ausführen können, wenn Fehler auftreten. Um dies zu erreichen, müssen wir eine Fehler-Controller-Bean erstellen, die die Standard-Bean ersetzt.

Dazu müssen wir eine Klasse erstellen, die die ErrorController- Schnittstelle implementiert und ihre getErrorPath () -Methode überschreibt , um einen benutzerdefinierten Pfad zurückzugeben, der beim Auftreten eines Fehlers aufgerufen werden soll.

Ab Version 2.3.x hat Spring Boot diese Methode jedoch nicht mehr unterstützt, und stattdessen sollte die Eigenschaft server.error.path verwendet werden, um den benutzerdefinierten Pfad anzugeben.

Da es jedoch immer noch Teil der ErrorController- Oberfläche ist und nicht vollständig entfernt wurde, müssen wir es überschreiben, da sich der Compiler sonst beschwert. Um das Problem hier zu umgehen, geben wir null zurück, da es sowieso ignoriert wird:

@Controller public class MyErrorController implements ErrorController { @RequestMapping("/error") public String handleError() { //do something like logging return "error"; } @Override public String getErrorPath() { return null; } }

Im obigen Snippet kommentieren wir die Klasse auch mit @Controller und erstellen eine Zuordnung für den Pfad, der als Eigenschaft server.error.path angegeben ist:

server.error.path=/error

Auf diese Weise kann der Controller Aufrufe des / error- Pfads verarbeiten.

In handleError () geben wir die zuvor erstellte benutzerdefinierte Fehlerseite zurück. Wenn wir jetzt einen 404-Fehler auslösen, wird unsere benutzerdefinierte Seite angezeigt.

Lassen Sie uns das handleError () weiter verbessern , um bestimmte Fehlerseiten für verschiedene Fehlertypen anzuzeigen.

Zum Beispiel können wir gut gestaltete Seiten speziell für 404- und 500-Fehlertypen haben. Dann können wir den HTTP-Statuscode des Fehlers verwenden, um eine geeignete Fehlerseite für die Anzeige zu bestimmen:

@RequestMapping("/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); if (status != null) { Integer statusCode = Integer.valueOf(status.toString()); if(statusCode == HttpStatus.NOT_FOUND.value()) { return "error-404"; } else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) { return "error-500"; } } return "error"; }

Bei einem 404-Fehler wird beispielsweise die Seite error-404.html angezeigt :

4. Fazit

Mit diesen Informationen können wir jetzt Fehler eleganter behandeln und unseren Benutzern eine ästhetische Seite zeigen.

Wie immer ist der vollständige Quellcode auf Github verfügbar.