这篇文章主要讲解了“SpringBoot自定义错误页面方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot自定义错误页面方式有哪些”吧!以前WEB.xml方式先来看下
这篇文章主要讲解了“SpringBoot自定义错误页面方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot自定义错误页面方式有哪些”吧!
先来看下在web.xml中配置错误页面的方式:
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location></error-page>
在SpringBoot后,可以通过如下几种方式实现自定义错误页面。
适合内嵌服务器,先在controller中定义我们的错误页面Mapping,通过在配置类中实现EmbeddedServletContainerCustomizer的bean,加入对应状态码的错误页面。注意这种方式在打成war后,供外部Tomcat使用时,将会失效。
定义错误页面:
@RequestMapping(value = "/error/[code]") public String error(@PathVariable int code, Model model) { String pager = "/content/error-pager"; switch (code) { case 404: model.addAttribute("code", 404); pager = "/content/error-pager"; break; case 500: model.addAttribute("code", 500); pager = "/content/error-pager"; break; } return pager; }
在配置类中加入EmbeddedServletContainerCustomizer:
@Beanpublic EmbeddedServletContainerCustomizer containerCustomizer() { return container -> { ErrorPage error404Page = new ErrorPage(httpstatus.NOT_FOUND, "/error/404"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"); container.addErrorPages(error404Page, error500Page); };
适合内嵌Tomcat或者war方式。
@Componentpublic class ErrorPageInterceptor extends HandlerInterceptorAdapter { private List<Integer> errorCodeList = Arrays.asList(404, 403, 500, 501); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (errorCodeList.contains(response.getStatus())) { response.sendRedirect("/error/" + response.getStatus()); return false; } return super.preHandle(request, response, handler); }}
在配置类中添加拦截
@Configurationpublic class WebmvcConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorReGIStry registry) { registry.addInterceptor(errorPageInterceptor);//.addPathPatterns("/action/**", "/mine/**");默认所有 super.addInterceptors(registry); }}
在resource/templates下添加error.html页面,springBoot会自动找到该页面作为错误页面,适合内嵌Tomcat或者war方式。
SpringBoot错误视图提供了以下错误属性:
timestamp
:错误发生时间;
status
:HTTP状态吗;
error
:错误原因;
exception
:异常的类名;
message
:异常消息(如果这个错误是由异常引起的);
errors
:BindingResult异常里的各种错误(如果这个错误是由异常引起的);
trace
:异常跟踪信息(如果这个错误是由异常引起的);
path
:错误发生时请求的URL路径。
SpringBoot使用的前端框架模板不同,页面的名称也有所不同:
实现Spring的View接口的Bean,其ID需要设置为error(由Spring的BeanNameViewResolver所解析);
如果配置了Thymeleaf,则需命名为error.html的Thymeleaf模板;
如果配置了FreeMarker,则需命名为error.ftl的FreeMarker模板;
如果配置了Velocity,则需命名为error.vm的Velocity模板;
如果是用JSP视图,则需命名为error.jsp的JSP模板。
Thymeleaf实例:
<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <title th:text="${title}"></title></head><body class="layout"><div class="wrap"> <!-- S top --> <div th:include="/header/module-header::module-header"></div> <!-- S 内容 --> <div class="panel-l container clearfix"> <div class="error"> <p class="title"><span class="code" th:text="${status}"></span>非常抱歉,没有找到您要查看的页面</p> <a href="/" rel="external nofollow" class="btn-back common-button">返回首页 <img class="loGo-back" src="/img/back.png"> </a> <div class="common-hint-Word"> <div th:text="${#dates.fORMat(timestamp,'yyyy-MM-dd HH:mm:ss')}"></div> <div th:text="${messages}"></div> <div th:text="${error}"></div> </div> </div> </div></div></div></body></html>
对于外部Tomcat第三中方案是比较推荐的一种实现方式,但不够灵活,我们不好定义自己的属性,如果想对其做相应修改,可以参见源码BasicErrorController,通过继承AbstractErrorController,并重写errorHtml方法,达到自己想要的效果。在内嵌Tomcat时,第一种推荐使用,更具灵活性。
感谢各位的阅读,以上就是“SpringBoot自定义错误页面方式有哪些”的内容了,经过本文的学习后,相信大家对SpringBoot自定义错误页面方式有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
--结束END--
本文标题: SpringBoot自定义错误页面方式有哪些
本文链接: https://lsjlt.com/news/300800.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0