在项目中为了友好化,对于错误页面,我们常常会使用自定义的页面。SSM框架组合时代,我们通常通过拦截或者在web.xml中设置对于错误码的错误页面:
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
然而到了SpringBoot,web.xml消失了,SpringBootServletInitializer初始化servlet代替了web.xml。难道要再把web.xml加回去?这样虽然可以做到,但并不合理。下面提供了多种在SpringBoot中实现自定义错误页面的方法。
通过ErrorPageRegistrar实现
配置类要实现ErrorPageRegistrar类,并且要注入到容器中:
@Component
public class MyError implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
/*1、按错误的类型显示错误的网页*/
/*错误类型为404,找不到网页的,默认显示404.html网页*/
ErrorPage e404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
/*错误类型为500,表示服务器响应错误,默认显示500.html网页*/
ErrorPage e500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
/*2、按具体某个异常显示错误的网页*/
/*当某个异常即可以根据错误类型显示错误网页,由可以根据某个具体的异常来显示错误网页时,优先根据具体的某个异常显示错误的网页*/
ErrorPage argsException = new ErrorPage(IllegalArgumentException.class, "/args.html");
registry.addErrorPages(e404, e500,argsException);
}
}
在ErrorPageRegistrar我们注册了根据不同的请求响应错误类型显示不同的网页,也可以根据异常类型来显示错误网页,下面我们写一个Controller来测试这些错误页面有没有显示出来:
@Controller
public class ErrorTestController {
/*一、把错误抛在页面上
* 1.错误异常自定义在org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class中。*/
@RequestMapping("/error")
/*抛出参数不合法的异常到页面*/
public String erro(){
throw new IllegalArgumentException("arg is empty");
}
}