springboot中会自动在项目的template目录下寻找错误页面
按照如下目录结构和文件名创建文件,框架则可以自动找到错误页面,先不需要写太复杂的前端,有个展示即可【写个404,500,主页即可】
首先需要有一个主页面,即index.html
先设置好index的url
这样的话启动项目之后输入
【没另外设置端口的情况下】
localhost:8080
这样的话就会跳转到自定义的index.html页面
这里我们添加一个人为的错误来测试500页面能否正常
1.修改前端控制器,添加一个除以0的操作【将上面的注释解开即可】
2.重启
3.访问localhost:8080
结果如下
404页面只需要在url上面随便加点东西就能试出来
localhost:8080/1008608820
这里就不作示例
接下来是自定义错误页面 即异常的自定义页面跳转 首先先添加一个新的自定义错误页面  随后编写exceptionhandler 目录结构以及代码如下
@ControllerAdvice
public class ControllerExceptionHandler {
// 在工厂里面取出一个日志对象
private Logger logger= LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(Exception.class)
public ModelAndView exceptionHandler(HttpServletRequest request,Exception e){
logger.error("RequestURL : {},Exception : {}",request.getRequestURL(),e.toString());
// 在控制台输出异常
ModelAndView modelAndView = new ModelAndView();
// modelAndView.addObject("requestURL",request.getRequestURL());
// modelAndView.addObject("exception",e);
modelAndView.setViewName("error/error");
return modelAndView;
}
}
编写完之后即可测试
url: localhost:8080
如果想要在前端也显示异常,则可以解开上面代码的注释,然后用相应的前端模板取出数据
如果想要在控制台输出详细的异常信息,即可把上面的e.tostring()改为e
注意:这种属于一招通吃,即所有异常都被这个handler处理 ,但是有些异常如果想跳到其他页面则需要自行设置
步骤如下:
【这里举一个例子,如果后端查询博客返回为空,即博客文章找不到了,我们想要跳转到404页面】
1、编写逻辑,若查询对象为空,则抛出异常
2、编写异常
3、修改handler代码,使其绕过此异常
1、在indexcontroller中添加如下代码
String blog=null;
if(blog==null){
throw new BlogNotFoundException("博客原文消失了");
}
2、新建一个异常类
编写其构造方法即可
@ResponseStatus(HttpStatus.NOT_FOUND)
public class BlogNotFoundException extends RuntimeException {
public BlogNotFoundException() {
}
public BlogNotFoundException(String message) {
super(message);
}
public BlogNotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
3、在之前的controllerexceptionhandler类最开始部分添加如下代码
// 如果在注解中找到了有关此异常的状态标注,那就丢给那个方法处理
if((AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class)!=null)){
throw e;
}
// 反之如果没找到,统统交给这个handler处理
🆗大功告成