[JAVA] Gestion des exceptions Spring Boot

Gestion des exceptions Spring Boot

Aperçu

Dans SpringBoot, les exceptions peuvent être gérées de plusieurs manières, telles que la gestion des exceptions à l'aide de la fonction SpringMVC et la gestion des exceptions à l'aide de SpringBoot AutoConfiguration et du serveur intégré. Bien que cela soit indiqué dans Référence officielle, la gamme et le mécanisme qui peuvent être gérés sont un peu difficiles à comprendre. Je vais donc résumer les principales méthodes.

Méthode de gestion des exceptions

liste

Nom de la fonction couche
HandlerExceptionResolver SpringMVC
ErrorPage SpringBoot
ErrorController SpringBoot

HandlerExcepitonResolver `` HandlerExceptionResolver '' est une méthode de gestion des exceptions qui utilise les fonctions de Spring MVC. Puisqu'il utilise la fonction SpringMVC, il ne peut pas être géré si une exception se produit dans Filter ou View.

Un diagramme schématique de la manipulation est présenté ci-dessous. image.png

Par défaut, `` HandlerExceptionResolver '' a plusieurs classes d'implémentation ci-dessous. Dans le tableau ci-dessous, activer / désactiver indique s'il est activé ou désactivé dans les paramètres par défaut de Spring Boot, et le ExceptionResolver qui vient ci-dessus a la priorité.

nom de la classe Efficacité/Invalide une fonction
ExceptionHandlerExceptionResolver Efficacité @La gestion des exceptions est effectuée par la méthode à laquelle ExceptionHandler est affecté.
ResponseStatusExceptionResolver Efficacité @Gérer lorsqu'une classe d'exception avec ResponseStatus est générée
DefaultHandlerExceptionResolver Efficacité Gère les classes d'exceptions définies dans Spring MVC
SimpleMappingExceptionResolver Invalide Mapper directement les classes d'exceptions et les vues

Ce qui suit montre la méthode de gestion des exceptions par le plus orthodoxe `ʻExceptionHandlerExceptionResolver``.

Gestion par ExceptionHandlerExceptionResolver

Lorsqu'une exception se produit, la méthode avec l'annotation @ExceptionHandler à laquelle les méta-informations de la classe d'exception qui s'est produite sont ajoutées est analysée et le traitement est transféré.

La méthode avec @ExceptionHandler peut être définie dans la classe avec @Controller ou @ControllerAdvice comme indiqué ci-dessous.

ThrowExceptionController.java


@Controller
@RequestMapping("web")
public class ThrowExceptionController {
	
	@GetMapping("original")
	public void throwOriginalException() {
		throw new OriginalWebException("thrown in ThrowExceptionController");

	}
	
	@ExceptionHandler(OriginalWebException.class)
	public String handleOriginalWebException(OriginalWebException exception) {
		return "OriginalWebException.html";
	}

}

TransverseExceptionHandler.java


@ControllerAdvice
public class ThrowExceptionController {
	
	@ExceptionHandler(OriginalWebException.class)
	public String handleOriginalWebException(OriginalWebException exception) {
		return "OriginalWebException.html";
	}

}

Dans le cas de @Controller, la gestion des exceptions n'est possible que pour les exceptions qui se produisent dans le même Controller, mais dans le cas de @ControllerAdvice, tous les Controller peuvent être gérés à travers le tableau.

Si @Controller et @ControllerAdvice peuvent être gérés, celui donné à @Controller a la priorité.

ErrorPage

ErrorPage dans SpringBoot est presque le même que l'élément ErrorPage défini dans le SpringFW Web.xml conventionnel.

ErrorPage mappe le code d'état ou la classe d'exception au chemin d'accès afin qu'il puisse être géré. Un diagramme schématique est présenté ci-dessous. image.png

Comment enregistrer ErrorPage peut être effectué en créant une classe d'implémentation de ErrorPageRegistrar comme indiqué ci-dessous.

AddErrorPage.java



@Configuration
public class AddErrorPage implements ErrorPageRegistrar {

	@Override
	public void registerErrorPages(ErrorPageRegistry registry) {
		registry.addErrorPages(new ErrorPage(exception, path));

        // new ErrorPage(HttpStatusCode, path)Mais possible
	}
}

ErrorController ErrorController est une méthode de gestion des exceptions fournie par Spring Boot et est la méthode de gestion des exceptions la plus couramment utilisée dans Spring Boot. Un diagramme schématique est présenté ci-dessous. image.png

Si les exceptions qui se produisent dans l'application SpringBoot ne sont pas gérées, elles sont toutes censées être envoyées au chemin / error '' par la fonctionnalité ErrorPage mentionnée ci-dessus. Par défaut, / error '' est mappé à la classe `` BasicErrorController '', et la gestion y est effectuée.

Dans BasicErrorController '', la gestion renvoie HTML ou JSON en fonction de l'en-tête de la requête. Dans le cas du HTML, WhiteLabelErrorPage est retourné, et le contenu retourné est spécifié par ```ErrorAttributes. Dans le cas de JSON, «Attributs d'erreur» est renvoyé.

Pour personnaliser la méthode de gestion par ʻErrorController``, créez une classe d'implémentation de ʻErrorController. De plus, si vous souhaitez personnaliser le contenu renvoyé, implémentez la classe `ʻErrorAttributes.

Résumé

La gestion des exceptions dans l'application SpringBoot utilise essentiellement ʻErrorController``, et si vous souhaitez effectuer une gestion plus fine, utilisez `HandlerExceptionResolver``.

Recommended Posts

Gestion des exceptions Spring Boot
Gestion des exceptions
Exception de traitement des exceptions
Gestion des exceptions Java?
À propos de la gestion des exceptions
gestion des exceptions ruby
Défi Spring Boot
Gestion des exceptions Ruby
[Java] Gestion des exceptions
Forme de botte de printemps
☾ Java / Gestion des exceptions
À propos de la gestion des exceptions Java
Spring Boot Rappelez-vous
Gestion des exceptions Java
gae + botte à ressort
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
À propos de la gestion des exceptions Ruby
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Aide-mémoire Spring Boot2
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Apprentissage de Spring Boot [Début]
Rédaction de mémos de démarrage de printemps (2)
Résumé du document Spring Boot 2.2
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
Classes nécessitant une gestion des exceptions
[Spring Boot] Construction de l'environnement (macOS)
Définir le paramètre contextuel dans Spring Boot
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Première gestion des exceptions de Java (mémoire)
Spring Boot sur Microsoft Azure
Implémenter GraphQL avec Spring Boot
[Java] Pratique de la gestion des exceptions [Exception]
[Spring] Test de sortie d'exception du contrôleur
Démarrez avec Spring Boot
[Java] À propos de la gestion des exceptions try-catch
Bonjour tout le monde avec Spring Boot!
Multi-projets Spring Boot 2 avec Gradle
[Ruby] Gestion des exceptions dans les fonctions
[Spring Boot] Création d'applications Web
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Paramètres d'échange à chaud Spring Boot
[Java] Thymeleaf Basic (Spring Boot)
Règles d'utilisation pour la gestion des exceptions Java
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Introduction à Spring Boot ② ~ AOP ~
Application Java CICS-Run - (4) Application Spring Boot
Spring Boot à partir de Docker
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation