[JAVA] Obtenez des informations d'erreur à l'aide de DefaultErrorAttributes et ErrorAttributeOptions dans Spring Boot 2.3

Aperçu

Informations d'erreur pouvant être obtenues avec DefaultErrorAttributes

[DefaultErrorAttributes \ (Spring Boot 2 \ .3 \ .0 \ .RELEASE API )](https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/api/org/springframework/boot Les attributs des informations d'erreur qui peuvent être acquises 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

Exemple de code pour Spring Boot 2.2

import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.web.context.request.ServletWebRequest;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public class ErrorAttributesGetter22 {

  /**
   *Extraire les informations d'erreur.
   *
   * @param req demande d'informations
   * @renvoyer les informations d'erreur
   */
  public static Map<String, Object> getErrorAttributes(HttpServletRequest req) {
    //Obtenez des informations détaillées sur les erreurs avec la classe DefaultErrorAttributes
    ServletWebRequest swr = new ServletWebRequest(req);
    DefaultErrorAttributes dea = new DefaultErrorAttributes(true);
    return dea.getErrorAttributes(swr, true);
  }
}

Exemple de code pour Spring Boot 2.3

En utilisant la classe ErrorAttributeOptions, il est désormais possible de choisir d'acquérir ou non certains attributs (de les laisser comme informations d'erreur).

import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.web.context.request.ServletWebRequest;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public class ErrorAttributesGetter23 {

  /**
   *Extraire les informations d'erreur.
   *
   * @param req demande d'informations
   * @renvoyer les informations d'erreur
   */
  public static Map<String, Object> getErrorAttributes(HttpServletRequest req) {
    //Obtenez des informations détaillées sur les erreurs avec la classe DefaultErrorAttributes
    ServletWebRequest swr = new ServletWebRequest(req);
    DefaultErrorAttributes dea = new DefaultErrorAttributes();
    ErrorAttributeOptions eao = ErrorAttributeOptions.of(
      ErrorAttributeOptions.Include.BINDING_ERRORS,
      ErrorAttributeOptions.Include.EXCEPTION,
      ErrorAttributeOptions.Include.MESSAGE,
      ErrorAttributeOptions.Include.STACK_TRACE);
    return dea.getErrorAttributes(swr, eao);
  }
}

Vérifiez le code source de la classe DefaultErrorAttributes pour Spring Boot 2.3

Le code source de la pièce supprimée des informations d'erreur pour l'élément qui n'est pas la cible d'acquisition.

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

@Override
public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
	Map<String, Object> errorAttributes = getErrorAttributes(request, options.isIncluded(Include.STACK_TRACE));
	if (this.includeException != null) {
		options = options.including(Include.EXCEPTION);
	}
	if (!options.isIncluded(Include.EXCEPTION)) {
		errorAttributes.remove("exception");
	}
	if (!options.isIncluded(Include.STACK_TRACE)) {
		errorAttributes.remove("trace");
	}
	if (!options.isIncluded(Include.MESSAGE) && errorAttributes.get("message") != null) {
		errorAttributes.put("message", "");
	}
	if (!options.isIncluded(Include.BINDING_ERRORS)) {
		errorAttributes.remove("errors");
	}
	return errorAttributes;
}

Matériel de référence

Recommended Posts

Obtenez des informations d'erreur à l'aide de DefaultErrorAttributes et ErrorAttributeOptions dans Spring Boot 2.3
[Java] Obtenir des données de la base de données à l’aide du service singleton dans Spring (Boot)
Téléchargement et téléchargement de fichiers à l'aide d'Ajax avec Spring Boot (sans JQuery)
Erreur inconnue dans la ligne 1 de pom.xml lors de l'utilisation de Spring Boot dans Eclipse
Page d'erreur Spring Boot Whitelabel et réponse JSON
Sortie des journaux de demande et de réponse avec Spring Boot
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Obtenez des cookies au printemps
Test des entités et référentiels JPA à l'aide de Spring Boot @DataJpaTest
[Spring Boot] Obtenez des informations utilisateur avec l'API Rest (débutant)
Testez la classe injectée sur le terrain dans le test de démarrage Spring sans utiliser le conteneur Spring
Obtenez des informations de localisation avec Rails et triez par ordre croissant
Politique de contre-mesure CSRF et exemple de mise en œuvre dans une application REST utilisant "Spring Boot" + "EXT JS"
Définir le paramètre contextuel dans Spring Boot
Validation du ressort et code d'erreur
Obtenir des informations EXIF en Java
Démarrez avec Spring Boot
Multi-projets Spring Boot 2 avec Gradle
Obtenir des informations dans une instance et calculer des nombres Version standard
Comment appeler et utiliser l'API en Java (Spring Boot)
Erreur de connexion à la base de données Spring
Changements majeurs dans Spring Boot 1.5
NoHttpResponseException dans Spring Boot + WireMock
Essayez d'utiliser Spring Boot Security
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
8 choses à insérer dans DB en utilisant Spring Boot et JPA
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Développement facile d'applications Web avec STS et Spring Boot. Dans 10 minutes.
[Java] Obtenez des informations sur la date 10 jours plus tard en utilisant la milliseconde dans la classe Date
Obtenez une instance proxy du composant lui-même dans Spring Boot
Intégré dans Spring Boot à l'aide d'un fichier de définition de bean nommé application.xml
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker
Spring Boot Hello World dans Eclipse
Méthode de résolution d'erreur Spring Boot + PostgreSQL
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
[Ethereum] Obtenir des informations de bloc à l'aide de web3j
Écrire du code de test avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
Stocker les informations de session dans la base de données avec Spring Session
Implémenter l'API REST avec Spring Boot
Fonction de profil Spring et application Spring Boot.
Qu'est-ce que @Autowired dans Spring Boot?
Implémenter l'application Spring Boot dans Gradle
Comment utiliser Thymeleaf avec Spring Boot
Créez un projet Spring Boot avec intellij et quittez immédiatement après le lancement
Spring Boot + MyBatis J'obtiens cette erreur si je ne configure pas la base de données
Je suis resté coincé en utilisant un cas de serpent pour le nom de variable dans Spring Boot
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
Utilisation de Hystrix et Sentinel dans un exemple de code
Lancer un (ancien) projet Spring Boot avec IntelliJ
Créer une image Spring Boot + Docker avec Gradle
Priorité d'accès aux fichiers statiques dans Spring Boot
Existe en utilisant la spécification dans Spring Data JPA
Mémorandum de téléchargement de fichier local avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Créer un projet Java Spring Boot avec IntelliJ
Desserrer la vérification de la syntaxe de Thymeleaf dans Spring Boot
Erreur de mise en œuvre lors de la mise en œuvre de la validation Spring
[Entraine toi! ] Affichez Hello World avec Spring Boot