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.
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.
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``.
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.
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.
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
.
La gestion des exceptions dans l'application SpringBoot utilise essentiellement ʻErrorController``, et si vous souhaitez effectuer une gestion plus fine, utilisez
`HandlerExceptionResolver``.
Recommended Posts