[JAVA] Spring Boot Whitelabel-Fehlerseite und JSON-Antwort

Im Standardzustand von Spring Boot wird eine Fehlerseite mit dem Namen Whitelabel-Fehlerseite angezeigt, wenn 404 Not Found usw. auftritt.

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

Um das entsprechende Verhalten mit Curl zu überprüfen, geben Sie im Anforderungsheader mit der Option -H accept: text / html an.

$ 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>

Wenn die Option -H nicht hinzugefügt wird, werden Daten im JSON-Format zurückgegeben.

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

In der Spring Boot-Dokumentation wird angegeben, dass der Computerclient eine JSON-Antwort generiert und der Browserclient eine Whitelabel-Fehleransicht generiert, die im HTML-Format angezeigt wird.

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).

Es ist die BasicErrorController-Klasse, die Fehlerseiten in Spring Boot behandelt.

In der errorHtml-Methode der BasicErrorController-Klasse wird in der Annotation @RequestMapping = MediaType.TEXT_HTML_VALUE angegeben.

Daher wird diese errorHtml-Methode aufgerufen, wenn der Accept-Header der Anforderung text / html enthält. Wenn die Anforderung keinen Text / HTML-Code im Accept-Header enthält, wird die Fehlermethode aufgerufen.

Die errorHtml-Methode gibt eine HTML-Antwort zurück, und die error-Methode gibt eine JSON-Antwort zurück.

Der Quellcode des entsprechenden Teils wird unten angezeigt.

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, eine Klasse, die den Inhaltstyp wie text / html angibt, wird vom Spring Framework bereitgestellt, nicht von 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";

Referenz:

Recommended Posts

Spring Boot Whitelabel-Fehlerseite und JSON-Antwort
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
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).
Federvalidierung und Fehlercode
Minimale Anpassung der Spring Boot-Fehlerseite (Implementierung der ErrorController-Schnittstelle)
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
Spring Boot + PostgreSQL-Fehlerbehebungsmethode
Spring-Profilfunktion und Spring Boot application.properties
Spring Boot-Protokoll im JSON-Format ausgeben
HTTPS mit Spring Boot und Let's Encrypt
Javaw.exe Fehler beim Starten von Spring Boot (STS)
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Ab Spring Boot 2.3 enthält die Standardfehlerseite keine detaillierten Fehlerinformationen mehr
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Pläne zur Unterstützung von JDK 11 für Eclipse und Spring Boot
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
In die Spring Boot-Anwendung integrierte Integration von Tomcat, Apache und WebSocket
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Erweitern Sie Spring Boot DefaultErrorViewResolver, um Fehlerbildschirme dynamisch anzupassen
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Hallo Welt Vergleich zwischen Spark Framework und Spring Boot