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>
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>
@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); } }
<!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>
@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; } }
@Componentpublic class MyErrorViewResolver implements ErrorViewResolver { @Overridepublic ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { return new ModelAndView("/error/error",model);} }
#BasicErrorController的请求路径(你可以遇到错误后跳转的路径,该路径是一个BasicErrorController的请求路径,映射到它errorHtml或者error方法,由请求接受类型决定,一个返回错误页面,一个返回错误json)
#server.error.path=/error
#always include stacktrace(是否包含异常的堆栈信息,默认NEVER,页面无法获取到${trace!}的值,可取值NEVER,ALWAYS,ON_TRACE_PARAM; on_trace_param意思是请求带上参数 ?trace=true)
<em>server.error.include-stacktrace=always<br><br><br></em>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!