[JAVA] Ab Spring Boot 2.3 enthält die Standardfehlerseite keine detaillierten Fehlerinformationen mehr

Überblick

Elemente, die auf der Fehlerseite HTML und Fehler JSON ausgegeben werden

[DefaultErrorAttributes \ (Spring Boot 2 \ .3 \ .0 \ .RELEASE API )](https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/api/org/springframework/boot Die auszugebenden Elemente werden in /web/servlet/error/DefaultErrorAttributes.html beschrieben.

--Timelink: Zeitpunkt, zu dem der Fehler extrahiert wurde --status: Statuscode --error: Grund für den Fehler --exception: Name der Root-Ausnahmeklasse --message: Ausnahmemeldung --errors: Mehrere ObjectErrors (Bindungsfehler) in BindingResult festgelegt --trace: Exception Stack Trace --path: URL-Pfad, wenn eine Ausnahme auftritt

Einstellungen Eigenschaften

Das Vorhandensein oder Fehlen einer Ausgabe kann durch Festlegen der Werte für server.error.include-message (message) und server.error.include-binding-error in application.properties gesteuert werden.

Spring Boot 2.3 Release Notes · spring-projects/spring-boot Wiki · GitHub

Changes to the Default Error Page’s Content The error message and any binding errors are no longer included in the default error page by default. This reduces the risk of leaking information to a client. server.error.include-message and server.error.include-binding-errors can be used to control the inclusion of the message and binding errors respectively. Supported values are always, on-param, and never.

--server.error.include-message (steuert die Ausgabe von Nachrichtenelementen) --server.error.include-binding-error (steuert die Ausgabe von Fehlerelementen) --server.error.include-stacktrace (steuert die Ausgabe von Trace-Elementen) --server.error.include-exception (steuert die Ausgabe von Ausnahmeelementen)

Beispiel für eine Fehlerausgabe

Hier sind einige Beispiele für Fehlerantworten mit einigen Einstellungsmustern. Das aufgelistete HTML und JSON sind zur besseren Lesbarkeit formatiert.

Spring Boot 2.2

Wenn Sie in application.properties nichts angeben. In Spring Boot 2.2 werden Meldungen und Fehler ausgegeben, auch wenn nichts angegeben ist.

JSON

{
  "timestamp": "2020-07-19T06:14:27.622+0000",
  "status": 400,
  "error": "Bad Request",
  "errors": [
    {
      "codes": null,
      "arguments": null,
      "defaultMessage": "Künstlich erzeugter Foo-Fehler",
      "objectName": "fooError",
      "code": null
    },
    {
      "codes": null,
      "arguments": null,
      "defaultMessage": "Künstlich erzeugter Balkenfehler",
      "objectName": "barError",
      "code": null
    }
  ],
  "message": "Validation failed for object='fooBarData'. Error count: 2",
  "path": "/json"
}

HTML

<html><body>
<h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Sun Jul 19 15:14:30 JST 2020</div>
<div>There was an unexpected error (type=Bad Request, status=400).</div>
<div>Validation failed for object=&#39;fooBarData&#39;. Error count: 2</div>
</body></html>

Spring Boot 2.3

Wenn Sie in application.properties nichts angeben. Es ist so eingestellt, dass keine detaillierten Fehlerinformationen ausgegeben werden.

JSON

{
  "timestamp": "2020-07-19T06:13:46.546+00:00",
  "status": 400,
  "error": "Bad Request",
  "message": "",
  "path": "/json"
}

HTML

<html><body>
<h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Sun Jul 19 15:13:48 JST 2020</div>
<div>There was an unexpected error (type=Bad Request, status=400).</div>
<div></div>
</body></html>

Spring Boot 2.3 + Geben Sie nie, falsch in der Eigenschafteneinstellung an

Wenn in application.properties Folgendes angegeben ist. Es ist so eingestellt, dass keine detaillierten Fehlerinformationen ausgegeben werden.

server.error.include-message=never
server.error.include-binding-errors=never
server.error.include-stacktrace=never
server.error.include-exception=false

JSON

{
  "timestamp": "2020-07-19T06:13:18.720+00:00",
  "status": 400,
  "error": "Bad Request",
  "message": "",
  "path": "/json"
}

HTML

<html><body>
<h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Sun Jul 19 15:13:22 JST 2020</div>
<div>There was an unexpected error (type=Bad Request, status=400).</div>
<div></div>
</body></html>

Spring Boot 2.3 + immer, true in der Eigenschafteneinstellung angegeben

Wenn in application.properties Folgendes angegeben ist. Es ist so eingestellt, dass detaillierte Fehlerinformationen ausgegeben werden.

server.error.include-message=always
server.error.include-binding-errors=always
server.error.include-stacktrace=always
server.error.include-exception=true

JSON

{
  "timestamp": "2020-07-19T06:11:54.165+00:00",
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.validation.BindException",
  "trace": "org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors\n
            Error in object 'fooError': codes []; arguments []; default message [Künstlich erzeugter Foo-Fehler]\n
            Error in object 'barError': codes []; arguments []; default message [Künstlich erzeugter Balkenfehler]\n\t
            at example.FooBarRestController.json(FooBarRestController.java:20)
            (Unterlassung)
            java.base/java.lang.Thread.run(Thread.java:832)\n",
  "message": "Validation failed for object='fooBarData'. Error count: 2",
  "errors": [
    {
      "codes": null,
      "arguments": null,
      "defaultMessage": "Künstlich erzeugter Foo-Fehler",
      "objectName": "fooError",
      "code": null
    },
    {
      "codes": null,
      "arguments": null,
      "defaultMessage": "Künstlich erzeugter Balkenfehler",
      "objectName": "barError",
      "code": null
    }
  ],
  "path": "/json"
}

HTML

<html><body>
<h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Sun Jul 19 15:11:48 JST 2020</div>
<div>There was an unexpected error (type=Bad Request, status=400).</div>
<div>Validation failed for object=&#39;fooBarData&#39;. Error count: 2</div>
<div style='white-space:pre-wrap;'>
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Error in object &#39;fooError&#39;: codes []; arguments []; default message [Künstlich erzeugter Foo-Fehler]
Error in object &#39;barError&#39;: codes []; arguments []; default message [Künstlich erzeugter Balkenfehler]
	at example.FooBarController.page(FooBarController.java:20)
(Unterlassung)
	at java.base/java.lang.Thread.run(Thread.java:832)
</div>
</body></html>

Wo Fehlerinformationen im Spring Boot 2.3-Quellcode erstellt werden

Die DefaultErrorAttributes-Klasse erstellt Fehlerinformationen, die in JSON oder HTML ausgegeben werden sollen.

spring-boot/DefaultErrorAttributes.java at v2.3.0.RELEASE · spring-projects/spring-boot · GitHub

public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
  Map<String, Object> errorAttributes = new LinkedHashMap<>();
  errorAttributes.put("timestamp", new Date());
  addStatus(errorAttributes, webRequest);
  addErrorDetails(errorAttributes, webRequest, includeStackTrace);
  addPath(errorAttributes, webRequest);
  return errorAttributes;
}

Sie erstellen den HTML-Code für die Fehlerseite mit der ErrorMvcAutoConfiguration-Klasse.

spring-boot/ErrorMvcAutoConfiguration.java at v2.3.0.RELEASE · spring-projects/spring-boot · GitHub

StringBuilder builder = new StringBuilder();
Date timestamp = (Date) model.get("timestamp");
Object message = model.get("message");
Object trace = model.get("trace");
if (response.getContentType() == null) {
  response.setContentType(getContentType());
}
builder.append("<html><body><h1>Whitelabel Error Page</h1>").append(
    "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>")
    .append("<div id='created'>").append(timestamp).append("</div>")
    .append("<div>There was an unexpected error (type=").append(htmlEscape(model.get("error")))
    .append(", status=").append(htmlEscape(model.get("status"))).append(").</div>");
if (message != null) {
  builder.append("<div>").append(htmlEscape(message)).append("</div>");
}
if (trace != null) {
  builder.append("<div style='white-space:pre-wrap;'>").append(htmlEscape(trace)).append("</div>");
}
builder.append("</body></html>");

Referenzmaterial

Recommended Posts

Ab Spring Boot 2.3 enthält die Standardfehlerseite keine detaillierten Fehlerinformationen mehr
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Javaw.exe Fehler beim Starten von Spring Boot (STS)
Spring Boot Whitelabel-Fehlerseite und JSON-Antwort
Die Geschichte, dass der Port im Spring-Boot-Beispielprogramm unbrauchbar wird
Spring Boot Whitelabel-Fehlerseite und JSON-Antwort
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Unbekannter Fehler in Zeile 1 von pom.xml bei Verwendung von Spring Boot in Eclipse
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Boot + PostgreSQL-Fehlerbehebungsmethode
Nachricht erlöschen (Spring Boot)
Fehler bei der Implementierung bei der Implementierung der Spring-Validierung
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Javaw.exe Fehler beim Starten von Spring Boot (STS)
Ab Spring Boot 2.3 enthält die Standardfehlerseite keine detaillierten Fehlerinformationen mehr
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
[Spring Boot] Benutzerinformationen mit Rest API abrufen (Anfänger)
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 2).
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 1).
Mit Spring Boot herunterladen
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3