[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
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)
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='fooBarData'. 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>
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>
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='fooBarData'. Error count: 2</div>
<div style='white-space:pre-wrap;'>
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Error in object 'fooError': codes []; arguments []; default message [Künstlich erzeugter Foo-Fehler]
Error in object 'barError': 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>
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>");
Recommended Posts