Maison > Java > javaDidacticiel > contrôle des exceptions Spring Boot 1.5.4

contrôle des exceptions Spring Boot 1.5.4

巴扎黑
Libérer: 2017-06-26 11:35:11
original
1575 Les gens l'ont consulté

Spring Boot a implémenté la gestion unifiée des exceptions. Voyons comment personnaliser la gestion des exceptions

Mappage des pages de codes d'erreur

1.1 Page statique

Doit être configuré dans le dossier resources/static/error, nommé d'après le code d'erreur

Ce qui suit est le contenu du 404 page d'erreur, lors de l'accès Lorsqu'un lien n'existe pas, localisez cette page

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Not Found</title></head><body><h1>Sorry, Not Found</h1><p>status code is 404</p></body></html>
Copier après la connexion
Effet d'affichage

1.2 Page de modèle dynamique (l'emplacement de stockage de la page ne peut pas être modifié, et il n'y a que deux noms : 4xx et 5xx)

Exemple ( 5xx.ftl)

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Error</title></head><body><h1>server error</h1><p><div style="color:red;font-size:large">error code: ${status}-${error}</div><div style="color:red;font-size:medium">error msg: ${exception!},${message!}</div><div><div id="trace" style="color:grey;font-size:small;display: none;border: 1px solid black;padding: 10px;">${trace!}</div></div></p></body></html>
Copier après la connexion

Accès intentionnel à une requête qui lève une exception (/test2/throwex)

@Controller
@RequestMapping("/test2")public class Test2 {

    @RequestMapping("")public String index(){return "test";
    }

    @RequestMapping("/throwex")
    @ResponseBodypublic String throwex(){int a = 3;int b=0;return String.valueOf(a/b);
    }
}
Copier après la connexion
Effet de page

Si ajax est utilisé pour accéder à cette demande d'erreur, le message d'erreur représenté par json sera renvoyé

Page de démonstration ( /test2 -> test.ftl)

<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>test</title><script type="text/javascript" src="/js/jquery-2.0.3.min.js?1.1.11"></script></head><body><h1>test page</h1><div><button onclick="doAjax();">请求异常测试</button><div id="msg"></div><textarea id="errorMsg" style="color:red;width: 80%;height:300px"></textarea></div><script type="text/javascript">var doAjax = function () {
        $.ajax({
            url:'/test2/throwex',
            async:true,
            type:'GET',
            data:{},
            dataType:'json',
            success:function (data) {
                $('#msg').text(data);
            },
            error: function(xhr, textStatus, errorThrown) {//                alert(XMLHttpRequest.status);//                alert(XMLHttpRequest.readyState);//                alert(textStatus);                $('#errorMsg').text(xhr.responseText);
            }
        }); 
    };</script></body></html>
Copier après la connexion
Visitez la page de test, cliquez sur le bouton et voyez l'effet comme suit :

Voici les erreurs lors de l'accès à l'aide d'un navigateur Web et d'ajax. L'interface obtient des résultats différents, l'une génère une page d'erreur et l'autre génère une erreur Json, qui est déterminée par le type de réception de la requête.

Accepter :text/html -> Retourner la page d'erreur
Accepter :application/json, text/javascript -> Retourner l'erreur json
L'implémentation spécifique peut être Afficher la classe BasicErrorController

2. Personnaliser le mappage des codes d'erreur sur les pages

2.1 Configuration du mappage des pages statiques (contrôler la relation de mappage des codes d'erreur lorsque personnalisation du conteneur intégré)

@Componentpublic class CustomizationBean implements EmbeddedServletContainerCustomizer{/** * 定制方法一:实现EmbeddedServletContainerCustomizer
     * @param container     */@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {//container.setPort(9000);    }/** * 定制方法二:注入EmbeddedServletContainerFactory
     * @return */@Beanpublic EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.setPort(9001);
        factory.setSessionTimeout(10, TimeUnit.MINUTES);//优先级高于配置在/static/error文件夹里面的404.html页面factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/403.html"));return factory;
    }
}
Copier après la connexion

2.2 Configuration du mappage dynamique des pages

@Componentpublic class MyErrorViewResolver  implements ErrorViewResolver {

    @Overridepublic ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {  return new ModelAndView("/error/error",model);}

}
Copier après la connexion

Ce ViewResolver personnalisé remplacera le processeur de page par défaut DefaultErrorViewResolver. La configuration ci-dessus mappe toutes les erreurs (quels que soient les codes d'erreur) à la page d'erreur error.ftl pour une gestion unifiée.

Nouveau contenu d'erreur de rendu de la page error.ftl

Configuration similaire à 5xx.ftl

3. Quelques configurations anormales

> ; L'attribut d'erreur renvoie le modèle)-> Jetez-le au processeur de page ErrorViewResolver
#BasicErrorController的请求路径(你可以遇到错误后跳转的路径,该路径是一个BasicErrorController的请求路径,映射到它errorHtml或者error方法,由请求接受类型决定,一个返回错误页面,一个返回错误json)
Copier après la connexion
#server.error.path=/error
Copier après la connexion
#always include stacktrace(是否包含异常的堆栈信息,默认NEVER,页面无法获取到${trace!}的值,可取值NEVER,ALWAYS,ON_TRACE_PARAM; on_trace_param意思是请求带上参数 ?trace=true)
Copier après la connexion
<em>server.error.include-stacktrace=always<br><br><br></em>
Copier après la connexion

afin que vous puissiez personnaliser le contrôleur/personnaliser

ErrorAttributes/Customization

ErrorViewResolver, etc., pour obtenir une gestion des exceptions plus complexe

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal