Spring Boot自定义错误视图的方法详解
SpringBoot缺省错误视图解析器
Web应用在处理请求的过程中发生错误是非常常见的情况,SpringBoot中为我们实现了一个错误视图解析器(DefaultErrorViewResolver)。它基于一些常见的约定,尝试根据HTTP错误状态码解析出错误处理视图。它会在目录/error下针对提供的HTTP错误状态码搜索模板或者静态资源,比如,给定了HTTP状态码404,它会尝试搜索如下模板或者静态资源:
- /
/error/404. -这里表示所配置的模板所在目录, 表示所用的模板的文件名 - /
/error/404.html -这里表示静态资源文件所在路径、 - /
/error/4xx. - /
/error/4xx.html
如果找不到就用默认的白标错误视图,如下图所示:
因此,为了给用户最佳的使用体验,404等常见错误需要我们自定义页面来处理。以下是几种自定义错误页面的方式。
方式1.定义静态的错误页面
在resources下的static目录下,新建error目录,在其中新建各种静态错误页面,如404、500,也可以模糊处理,如4xx、5xx等,当程序运行出错时,会自动根据错误代码(如500)找到相应的错误页面(如/static/error/500.html),给予展示。
方式2.定义动态的错误页面(有采用模板引擎)
在有使用模板的情况下,SpringBoot缺省的错误视图解析器也会在/
1)在resources下的templates目录下,新建error目录,在其中新建各种静态错误页面,如404、500,也可以模糊处理,如4xx、5xx等(与方式1一致)+
在模板引擎的支持下可以取到错误的一些信息,并定制化显示在页面上,如下(freemarker模板):
错误信息定制:
- timestamp:时间戳
- status:状态码
- error:错误提示
- exception:异常对象
- trace:跟踪流程日志,404状态下无
- message:异常消息
- path:请求路径
方式3.自定义实现错误视图解析,统一错误处理
如果不想要使用缺省的错误处理视图解析器,想要定制一些自己的东西(比如说:错误引导信息等),按照官方文档的建议我们可以自定义实现错误视图解析接口来处理。
下面就是通过实现错误视图解析接口ErrorViewResolver,将4xx、5xx的错误页面集中在一个自定义视图上:
1)实现ErrorViewResolver接口
packagecom.hongyang.admin.web; importorg.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver; importorg.springframework.http.HttpStatus; importorg.springframework.stereotype.Component; importorg.springframework.web.servlet.ModelAndView; importjavax.servlet.http.HttpServletRequest; importjava.util.Map; /** *实现自定义的错误视图解析器 */ @Component publicclassAdminErrorViewResolverimplementsErrorViewResolver{ /** *实现ErrorViewResolver约定方法, *返回统一的错误视图. *@paramrequest *@paramstatus *@parammodel *@return */ @Override publicModelAndViewresolveErrorView(HttpServletRequestrequest,HttpStatusstatus,Mapmodel){ returnnewModelAndView("/error/index",model); } }
2)完成错误视图,在templates/error下添加index.ftlh视图(freemarker模板)
${status}
${error}, 点击查看明细!
返回
请求的URL:${path}
#if> <#ifmessage??>异常信息:
StackTrace:
${trace}