Spring Boot: Anpassen der Whitelabel-Fehlerseite

Spring Boot: Passen Sie die Whitelabel-Fehlerseite an

1. Überblick

In diesem Artikel werden wir uns ansehen, wiedisable and customize the default error page for a Spring Boot application, 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 Eigenschaftserver.error.whitelabel.enabledauffalse: setzen

server.error.whitelabel.enabled=false

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

We can achieve the same result by excluding the ErrorMvcAutoConfiguration bean. Wir können dies tun, indem wir diesen Eintrag entweder 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 den Fehler dann tatsächlich behandelt?

Wie oben erwähnt, handelt es sich normalerweise um den zugrunde liegenden 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.

We’ll save the file as error.html, da wir dieThymeleaf -Stemplate-Engine verwenden:




Something went wrong!

Our Engineers are on it

Go Home

If we save this file in resources/templates directory, it’ll automatically be picked up standardmäßigBasicErrorController von Spring Boot.

Dies ist alles, was wir zum Anzeigen unserer benutzerdefinierten Fehlerseite benötigen. Mit etwas Styling haben wir jetzt eine viel besser aussehende Fehlerseite für unsere Benutzer:

 

Spring Boot Custom Error Page

Wir können spezifischer sein, indem wir die Datei mit dem HTTP-Statuscode benennen, den wir verwenden möchten, z. Wenn Sie die Datei als404.html inresources/templates/error speichern, wird sie explizit für 404-Fehler verwendet.

3.1. Ein benutzerdefiniertesErrorController

Bisher besteht die Einschränkung 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.

Zu diesem Zweck gibtwe have to create a class that implements the ErrorController interface und überschreibtgetErrorPath() to, um einen benutzerdefinierten Pfad zurückzugeben, der aufgerufen werden soll, wenn ein Fehler aufgetreten ist:

@Controller
public class MyErrorController implements ErrorController  {

    @RequestMapping("/error")
    public String handleError() {
        //do something like logging
        return "error";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

Im obigen Snippet kommentieren wir die Klasse auch mit@Controller und erstellen eine Zuordnung für den Pfad, der vongetErrorPath() zurückgegeben wird. Auf diese Weise kann der Controller Aufrufe des Pfades/errorverarbeiten.

InhandleError() 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 diehandleError() weiter verbessern, um bestimmte Fehlerseiten für verschiedene Fehlertypen anzuzeigen.

Zum Beispiel können wir Seiten speziell für 404- und 500-Fehlertypen schön gestalten. Dann können wir den HTTP-Statuscode des Fehlers verwenden, um eine geeignete anzuzeigende Fehlerseite 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 Seiteerror-404.htmlangezeigt:

image

4. Fazit

Mit diesen Informationen können wir jetzt eleganter mit Fehlern umgehen und unseren Benutzern eine ästhetische Seite zeigen.

Wie immer ist der vollständige Quellcodeover on Github verfügbar.