[JAVA] Page d'erreur Spring Boot Whitelabel et réponse JSON

Dans l'état par défaut de Spring Boot, une page d'erreur appelée Page d'erreur Whitelabel s'affiche lorsque 404 Not Found etc. se produit.

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Nov 18 22:16:56 JST 2019
There was an unexpected error (type=Not Found, status=404).
No message available

Pour vérifier le comportement équivalent avec curl, spécifiez accept: text / html dans l'en-tête de la requête avec l'option -H.

$ curl -H "accept: text/html" http://localhost:8080/
<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'>Mon Nov 18 22:18:01 JST 2019</div><div>There was an unexpected error (type=Not Found, status=404).</div><div>No message available</div></body></html>

Si l'option -H n'est pas ajoutée, les données au format JSON seront renvoyées.

$ curl http://localhost:8080/
{"timestamp":"2019-11-18T13:19:03.320+0000","status":404,"error":"Not Found","message":"No message available","path":"/"}

La documentation Spring Boot indique que le client de la machine générera une réponse JSON et que le client du navigateur générera une vue d'erreur de marque blanche à afficher au format HTML.

Spring Boot Reference Documentation

For machine clients, it produces a JSON response with details of the error, the HTTP status, and the exception message. For browser clients, there is a “whitelabel” error view that renders the same data in HTML format (to customize it, add a View that resolves to error).

C'est la classe BasicErrorController qui gère les pages d'erreur dans Spring Boot.

Dans la méthode errorHtml de la classe BasicErrorController, produit = MediaType.TEXT_HTML_VALUE est spécifié dans l'annotation @RequestMapping.

Par conséquent, cette méthode errorHtml est appelée lorsque l'en-tête Accept de la demande contient du texte / html. Si la demande n'inclut pas de texte / html dans l'en-tête Accept, la méthode d'erreur est appelée.

La méthode errorHtml renvoie une réponse HTML et la méthode error renvoie une réponse JSON.

Le code source de la partie concernée est indiqué ci-dessous.

spring-boot/BasicErrorController.java at v2.2.1.RELEASE · spring-projects/spring-boot · GitHub

@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
  HttpStatus status = getStatus(request);
  Map<String, Object> model = Collections
      .unmodifiableMap(getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
  response.setStatus(status.value());
  ModelAndView modelAndView = resolveErrorView(request, response, status, model);
  return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);
}

@RequestMapping
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
  HttpStatus status = getStatus(request);
  if (status == HttpStatus.NO_CONTENT) {
    return new ResponseEntity<>(status);
  }
  Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
  return new ResponseEntity<>(body, status);
}

MediaType, une classe qui indique le type de contenu comme text / html, est fournie par Spring Framework, et non par Spring Boot.

spring-framework/MediaType.java at v5.2.1.RELEASE · spring-projects/spring-framework · GitHub

/**
 * A String equivalent of {@link MediaType#TEXT_HTML}.
 */
public static final String TEXT_HTML_VALUE = "text/html";

référence:

Recommended Posts

Page d'erreur Spring Boot Whitelabel et réponse JSON
Sortie des journaux de demande et de réponse avec Spring Boot
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 2)
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 1)
Validation du ressort et code d'erreur
Personnalisation minimale de la page d'erreur Spring Boot (implémentation de l'interface ErrorController)
Obtenez des informations d'erreur à l'aide de DefaultErrorAttributes et ErrorAttributeOptions dans Spring Boot 2.3
Méthode de résolution d'erreur Spring Boot + PostgreSQL
Fonction de profil Spring et application Spring Boot.
Sortie du journal Spring Boot au format json
HTTPS avec Spring Boot et Let's Encrypt
Erreur Javaw.exe lors du démarrage de Spring Boot (STS)
Ajoutez une botte de printemps et un dégradé à éclipse
À partir de Spring Boot 2.3, la page d'erreur par défaut ne contient plus d'informations détaillées sur l'erreur
À propos de la conception de Spring Boot et de l'environnement de test unitaire
Divers tableau de correspondance de Spring Framework et Spring Boot
Défi Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Plans pour prendre en charge JDK 11 pour Eclipse et Spring Boot
Test des entités et référentiels JPA à l'aide de Spring Boot @DataJpaTest
Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
Étendez Spring Boot DefaultErrorViewResolver pour personnaliser dynamiquement les écrans d'erreur
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
Comparaison Hello World entre Spark Framework et Spring Boot