springboot——异常处理

springboot中会自动在项目的template目录下寻找错误页面
在这里插入图片描述

按照如下目录结构和文件名创建文件,框架则可以自动找到错误页面,先不需要写太复杂的前端,有个展示即可【写个404,500,主页即可】

首先需要有一个主页面,即index.html
先设置好index的url
在这里插入图片描述
这样的话启动项目之后输入
【没另外设置端口的情况下】

localhost:8080

这样的话就会跳转到自定义的index.html页面
在这里插入图片描述

这里我们添加一个人为的错误来测试500页面能否正常
1.修改前端控制器,添加一个除以0的操作【将上面的注释解开即可】
2.重启
3.访问localhost:8080
结果如下
在这里插入图片描述
404页面只需要在url上面随便加点东西就能试出来

localhost:8080/1008608820

这里就不作示例


接下来是自定义错误页面 即异常的自定义页面跳转 首先先添加一个新的自定义错误页面 ![在这里插入图片描述](https://img-blog.csdnimg.cn/93f421de837347e2b2656a3a9b4aed14.png) 随后编写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处理

🆗大功告成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值