43. Die Fehlerbehandlung von Spring MVC basierend auf der automatischen Springboot-Konfiguration bedeutet, dass das Demoprojekt, nachdem es einen Fehler gemeldet hat, zu einer benutzerdefinierten Fehlerseite springt

Spring MVC-Fehlerbehandlung: Spring MVC-Fehlerbehandlung basierend auf der automatischen SpringBoot-Konfiguration.

Dies bedeutet, dass beim Zugriff auf die Methode ein Fehler aufgetreten ist und dann eine benutzerdefinierte Fehlerseite angezeigt wird.

★ Zwei Fehlerbehandlungsmethoden

  • Methode 1: Basierend auf der Fehlerbehandlungsmethode der automatischen Konfiguration von Spring Boot kann das Fehlerbehandlungsverhalten über die Eigenschaftendatei konfiguriert werden.
    Stellen Sie einfach eine benutzerdefinierte Fehlerseite bereit.

  • Methode 2: Verwenden Sie AOP-basierte Ausnahmebehandlungsmechanismen wie @ResponseStatus, @ExceptionHandler, @ControllerAdvice usw.
    Dies basiert direkt auf dem Ausnahmebehandlungsmechanismus von Spring MVC für die Fehlerbehandlung.

Methode eins:

Im Folgenden wird Methode 1 beschrieben:
Fehlerbehandlungsmethode basierend auf der automatischen Spring Boot-Konfiguration. Das Fehlerbehandlungsverhalten kann über die Eigenschaftendatei konfiguriert werden. Stellen Sie einfach eine benutzerdefinierte Fehlerseite bereit.

★ Automatische Konfiguration der Fehlerbehandlung

默认提供了一个/error映射来处理所有的错误,并将它注册为Servlet容器的全局错误页面。

 - 对于程序客户端(比如Http Client或RESTful客户端),
   它会生成一个具有错误详情,HTTP状态和异常信息的JSON响应。

 - 对于普通浏览器,它会生成一个White Label(白标)页面,该页面以HTML格式显示同样的错误信息。 

 这就是为何,前面看到程序一旦出错,总可以在浏览器中看到一个白标错误页面。

 这是Spring Boot默认、自动提供的错误呈现。

★ Konfigurieren Sie die Attribute, die in das Fehlerobjekt aufgenommen werden sollen.

 Spring Boot使用ErrorProperties类来读取错误处理有关的配置信息。

 public class ErrorProperties {

@Value("${error.path:/error}")
private String path = "/error";

    // 指定错误对象是否包含exception" attribute.
private boolean includeException;

    // 指定错误对象是否包含trace属性.
private IncludeAttribute includeStacktrace = IncludeAttribute.NEVER;

    // 指定错误对象是否包含"message属性.
private IncludeAttribute includeMessage = IncludeAttribute.NEVER;

    // 指定错误对象是否包含errors属性.
private IncludeAttribute includeBindingErrors = IncludeAttribute.NEVER;

private final Whitelabel whitelabel = new Whitelabel();

错误对象会直接传给上面程序客户端(JSON响应)或浏览器的白标页面。

【换而言之】,你能在程序客户端中看到的JSON响应数据,以及在浏览器的白标页面中能看到错误信息,

 其实都是可以配置的,该配置就是由此处的ErrorProperties 负责设置的。

 因此可进行如下配置:

 # 指定包含异常类
 server.error.include-exception=true
 # 指定一直包含BindingErrors
 server.error.include-binding-errors=always
 # 指定启用白标页面(这是默认值)
 server.error.whitelabel.enabled=true

★ Benutzerdefinierte Fehlerseite

 ▲ 都要放在/error目录下。

 - 静态错误页面, 静态资源目录下的/error子目录中。
                  static/error或者public/error目录中。

 - 动态错误页面,应该放在templates/error目录中。

 ▲ 错误页面的命名

  错误代码.html(静态)或 错误代码.<页面模板的扩展名>——此处的扩展名取决于你用什么样的页面模板技术。

  Spring Boot的错误页面不仅可支持精确匹配,比如404.ext或404.html将作为404错误的错误页面。

  还可支持模糊匹配,比如定义文件名为“4xx.<ext>或4xx.html”的页面,它将可作为所有4xx错误码的错误页面。

  错误对象默认支持的属性,可通过DefaultErrorAttributes来查看。

★【Zusammenfassend】

 Spring Boot自动配置的错误处理,可以说非常简单。

 (1) 在application.properties文件中配置错误对象要包含哪些属性。

 (2) 在静态资源路径中的error子目录中定义静态错误页面,或在templates目录的error子目录中定义动态错误页面模板。

  这样Spring Boot即可呈现自定义出错误处理页面。

Code-Demo:

1. Nachdem das Demoprojekt einen Fehler gemeldet hat, springen Sie zur benutzerdefinierten Fehlerseite

Schreiben Sie zunächst eine Methode. Nachdem der Zugriff fehlgeschlagen ist, sieht die Standardfehlerseite, zu der gesprungen wird, folgendermaßen aus.
Die Seite ist jedoch für normale Menschen nicht benutzerfreundlich und muss daher optimiert werden.
Fügen Sie hier eine Bildbeschreibung ein

Um die Fehlerseite anzupassen, müssen Sie Folgendes tun:

Geben Sie in der Konfigurationsklasse an, welche Eigenschaften im zurückgegebenen Fehlerobjekt enthalten sein sollen

Fügen Sie hier eine Bildbeschreibung ein

Passen Sie als Nächstes die Fehlerseite an:
Die Fehlerseite ist in eine statische Seite und eine dynamische Seite unterteilt.
Statische Seite: Eine fest codierte Seite, die keinen Wert erhalten muss.
Dynamische Seiten: Es können einige Fehlermeldungen angezeigt werden, bei denen es sich um dynamische Seiten handelt.

Wichtig: Benutzerdefinierte Fehlerseiten müssen im Fehlerordner abgelegt werden.

  • Statische Fehlerseite im Unterverzeichnis /error unter dem statischen Ressourcenverzeichnis.
    im statischen /error- oder public/error-Verzeichnis.

  • Dynamische Fehlerseiten sollten im Verzeichnis templates/error abgelegt werden.

Dynamische Fehlerseite

Erstellen Sie nun eine dynamische Fehlerseite:
Erstellen Sie eine dynamische Fehlerseite im Verzeichnis templates/error. Einige Attributwerte auf der Seite stammen aus der DefaultErrorAttributes-Klasse, bei denen es sich um die vom DefaultErrorAttributes-Fehlerobjekt unterstützten Standardattribute handelt. Sie können Folgendes erhalten einige Fehlerinformationen.
Fügen Sie hier eine Bildbeschreibung ein

Die vom Fehlerobjekt standardmäßig unterstützten Attribute können über die Klasse DefaultErrorAttributes angezeigt werden.
Fügen Sie hier eine Bildbeschreibung ein

Test:
Da der Standardpfad für die Fehlersprungzuordnung von Springboot /error ist, wird beim Auftreten eines Fehlers standardmäßig der Ordner /error gefunden.

Aus dieser ErrorProperties-Klasse können wir den Standardzuordnungspfad sehen, nachdem ein Fehler aufgetreten ist.
Fügen Sie hier eine Bildbeschreibung ein
Wissenswertes:
Die Fehlerseite von Spring Boot unterstützt nicht nur die exakte Übereinstimmung, zum Beispiel wird 404.ext oder 404.html als Fehlerseite für 404-Fehler verwendet .
Es kann auch Fuzzy-Matching unterstützt werden, z. B. die Definition einer Seite mit dem Dateinamen „4xx. oder 4xx.html“, die als Fehlerseite für alle 4xx-Fehlercodes dient.

Es ist ersichtlich, dass bei einem 500-Fehler in der Zugriffsmethode automatisch zur Seite gesprungen wird, die mit 5xx beginnt.

Fügen Sie hier eine Bildbeschreibung ein

Statische Fehlerseite

Wir können nach Belieben darauf zugreifen. Wenn es keine solche Methode gibt, wird diese Seite angezeigt. Zu diesem Zeitpunkt können wir eine statische Fehlerseite zur Anzeige erstellen.
Fügen Sie hier eine Bildbeschreibung ein

wichtiger Punkt:

  • Statische Fehlerseite im Unterverzeichnis /error unter dem statischen Ressourcenverzeichnis.
    im statischen /error- oder public/error-Verzeichnis.

Fügen Sie hier eine Bildbeschreibung ein

Wirkung:
Fügen Sie hier eine Bildbeschreibung ein

添加thymeleaf需要的jar包

        <!--  添加 thymeleaf 依赖 ,整合 thymeleaf 的 starter  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- jquery 的 web jar 包 -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.6.0</version>
        </dependency>
        <!-- bootstrap 的 web jar 包 -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.6.0</version>
        </dependency>
        <!--支持版本无关的 Web Jar ,前端引入 Web Jar 相关的 jquery、bootstrap 依赖可以不用写版本号-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-locator-core</artifactId>
            <version>0.47</version>
        </dependency>

前端页面需要引入的一些js样式

    <!--  引入css样式,用 link 元素  ,  stylesheet 样式单 , .gz表示是打包的,但是springboot会自动解包 -->
    <!--  引入 Bootstrap 的 Web Jar 中的 CSS 样式  -->
    <link rel="stylesheet" th:href="@{'/webjars/bootstrap/css/bootstrap.min.css'}">
    <!--  jquery 放在 bootstrap 前面,因为 bootstrap 需要依赖到 jquery  -->
    <!--  引入 jQuery 的 Web Jar 中的 js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/jquery/jquery.min.js'}"></script>
    <!--  引入 Bootstrap 的 Web Jar 中的 js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/bootstrap/js/bootstrap.bundle.min.js'}"></script>
    <!--  引入 popper 的 Web Jar 中的 Js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/popper.js/umd/popper.min.js'}"></script>

Supongo que te gusta

Origin blog.csdn.net/weixin_44411039/article/details/132587339
Recomendado
Clasificación