--Depuis Spring Boot 2.3, la réponse d'erreur par défaut (page d'erreur HTML et erreur JSON) ne contient plus de messages d'erreur ou d'erreurs de liaison. Il s'agit d'une mesure pour empêcher que des informations d'erreur involontaires ne soient renvoyées dans la réponse.
[DefaultErrorAttributes \ (Spring Boot 2 \ .3 \ .0 \ .RELEASE API )](https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/api/org/springframework/boot Les éléments à afficher sont décrits dans /web/servlet/error/DefaultErrorAttributes.html).
--Timelink: heure à laquelle l'erreur a été extraite --status: code d'état --error: raison de l'erreur --exception: nom de la classe d'exception racine --message: message d'exception --errors: Plusieurs ObjectErrors (binding-errors) définis dans BindingResult --trace: trace de pile d'exception --path: chemin de l'URL lorsqu'une exception se produit
La présence ou l'absence de sortie peut être contrôlée en définissant les valeurs de server.error.include-message (message) et server.error.include-binding-errors dans application.properties.
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 (contrôle la sortie des éléments de message) --server.error.include-binding-errors (contrôle la sortie des éléments d'erreurs) --server.error.include-stacktrace (contrôle la sortie des éléments de trace) --server.error.include-exception (contrôle la sortie des éléments d'exception)
Voici quelques exemples de réponses d'erreur avec quelques modèles de réglage. Le HTML et le JSON répertoriés sont formatés pour la lisibilité.
Spring Boot 2.2
Si vous ne spécifiez rien dans application.properties. Dans Spring Boot 2.2, le message et les erreurs sont affichés même si rien n'est spécifié.
JSON
{
"timestamp": "2020-07-19T06:14:27.622+0000",
"status": 400,
"error": "Bad Request",
"errors": [
{
"codes": null,
"arguments": null,
"defaultMessage": "Erreur foo générée artificiellement",
"objectName": "fooError",
"code": null
},
{
"codes": null,
"arguments": null,
"defaultMessage": "Erreur de barre générée artificiellement",
"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
Si vous ne spécifiez rien dans application.properties. Il est configuré pour ne pas fournir d'informations détaillées sur les erreurs.
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>
Lorsque ce qui suit est spécifié dans application.properties. Il est configuré pour ne pas fournir d'informations détaillées sur les erreurs.
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>
Lorsque ce qui suit est spécifié dans application.properties. Il est configuré pour afficher des informations d'erreur détaillées.
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 [Erreur foo générée artificiellement]\n
Error in object 'barError': codes []; arguments []; default message [Erreur de barre générée artificiellement]\n\t
at example.FooBarRestController.json(FooBarRestController.java:20)
(Omission)
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": "Erreur foo générée artificiellement",
"objectName": "fooError",
"code": null
},
{
"codes": null,
"arguments": null,
"defaultMessage": "Erreur de barre générée artificiellement",
"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 [Erreur foo générée artificiellement]
Error in object 'barError': codes []; arguments []; default message [Erreur de barre générée artificiellement]
at example.FooBarController.page(FooBarController.java:20)
(Omission)
at java.base/java.lang.Thread.run(Thread.java:832)
</div>
</body></html>
La classe DefaultErrorAttributes génère des informations d'erreur à afficher en JSON ou HTML.
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;
}
Vous créez le code HTML de la page d'erreur avec la classe ErrorMvcAutoConfiguration.
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