一.为什么要用全局来捕获异常
全局捕获异常是指:整个web请求项目全局捕获异常。
原理:利用了AOP技术(面向切面编程)
举一个很简单的例子,当我们写代码时肯定会报错,出现一些bug,但是我们不想把我们的bug展示给客户,那么我们肯定就要创建一个异常类来捕获出现的异常给我们的后端开发人员,这里就要用到全局捕获异常。所以说,如果我们架构一个项目的时候,我们必须要有这么一个类来捕获异常,否则用户在用我们的系统的时候,当出现bug时会给用户展现一些用户看不懂的画面,比如404错误等。
二.全局捕获异常应该怎么用
我们用代码来展示
代码结构
解释一下代码的结构
这里我们会用到这么几个类的代码:controller层的ErrorController.java、error层的GlobalExceptionHandler.java和JspApp.java
接下来是代码的具体展示部分
ErrorController.java
我们用一个很简单的小案例来演示全局捕获异常是如何实现的,首先建立一个叫ErrorController的类,我们定义一个getUser的方法,返回String类型参数。这里代码功能就是要展现,当输入的i = 0的时候,我们的网页返回的内容到底是什么。
GlobalExceptionHandler.java
这里面,我们会用到一些注解,@ControllerAdvice,@ExceptionHandler,@ResponseBody,我们具体来说一下他们的用法:
1.@ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类,可以指定扫描范围,约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用@ResponseBody 进行 json 转换,注意一点的是,这个注解可以写它的扫包的范围。
2.@ExceptionHandler 表示拦截异常
我们在这个类中,新建了一个Map类型的方法,然后将错误信息放入到Map中,如果捕获到异常,就会显示如图中所示的json格式的数据,最后return errorResultMap。
JspApp为启动类,这里不详细说明,如果自学过SpringBoot的话应该会写这个启动类,很简单。
接下来我们启动项目,在浏览器中输入127.0.0.1/8080/getUser?i=0,我们看一下输出结果。
总结:1.要理解全局捕获中的几个注解,如@ControllerAdvice,@ExceptionHandler等
2.要理解全局捕获的实现场景,尤其在真实的项目中,如何搭建,如何使用。
OK这就是全局捕获异常的小案例,本文仅供作者学习记录使用,如有错误请指正。谢谢