SpringBoot项目如何实现全局异常捕获

301 阅读2分钟

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

写在前面

在规范好的项目组中进行工作,一般都是有着很严格的开发规范的,比如编码上的规范,在某些位置要固定的去抛出异常,日志的输出规范等等等,很多很多的规范,往往给没有养成好的开发习惯的人们造成很大的困扰。

今天我要给大家分享的就是异常的全局化处理问题。

SpringBoot项目如何实现全局异常捕获

SpringBoot项目中要想去实现全局异常捕获,无非就是利用两个关键性的注解来实现。

那就是@ControllerAdvice注解 和 @ExceptionHandler注解。

@ControllerAdvice:增强版的Controller注解,一般都是声明全局性的功能,比如实现全局异常处理,或者是全局数据绑定,亦或者是全局数据预处理等等的。

@ExceptionHandler:统一处理某一类异常,其中可以指定某一类异常的class,使用该注解,可以让处理某类异常的时候更方便些。

而这两个注解如何配合使用才能处理全局的异常呢,来看一下相关的代码吧。

首先创建一个类,代码如下:

public class GlobalExceptionHandle {

    

}

加入@ControllerAdvice注解,代码如下:

@ControllerAdvice
public class GlobalExceptionHandle {


}

声明了全局性的类之后,再让我们加入异常的捕获注解@ExceptionHandler。

@ControllerAdvice
public class GlobalExceptionHandle {

    /***
     * 404处理
     * @return
     */
    @ExceptionHandler(NoHandlerFoundException.class)
    public String notFountHandler(HttpServletRequest request, HttpServletResponse response, Model model, NoHandlerFoundException e) throws IOException, JSONException {
        String servletPath = request.getServletPath();
        String msg = "未找到路径:" + servletPath;
        return msg;
    }

}

如上代码,我们就加入了404异常的处理,我们也可以加入空指针的异常处理,如下代码:

@ControllerAdvice
public class GlobalExceptionHandle {

    /***
     * 404处理
     * @return
     */
    @ExceptionHandler(NoHandlerFoundException.class)
    public String notFountHandler(HttpServletRequest request, HttpServletResponse response, Model model, NoHandlerFoundException e) throws IOException, JSONException {
        String servletPath = request.getServletPath();
        String msg = "未找到路径:" + servletPath;
        return msg;
    }
    
    /***
     * 404处理
     * @return
     */
    @ExceptionHandler(NullPointerException.class)
    public String notFountHandler(HttpServletRequest request, HttpServletResponse response, Model model, NoHandlerFoundException e) throws IOException, JSONException {
        String servletPath = request.getServletPath();
        String msg = "空指针了:" + servletPath;
        return msg;
    }

}

这样我们就可以实现了全局异常的捕获了,是不是很简单,快去试试吧。