开发者学堂课程【SpringBoot 实战教程: 全局异常处理器】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10792
全局异常处理器
内容介绍:
一、定义
二、案例
一、定义
springboot 中的异常处理器使用的是aop的思想,在学习 springaop 时学到异常操作通知,前置通知,后置通知,环绕通知,其中还有一个中异常抛出通知,而 springboot 利用 aop 思想进行异常的处理。
二、案例
1、创建一个全局异常处理类,命名为 GlobalExceptionHandler,异常实际上是作为通知介入的,所以要使用注解 ControllerAdvice,Advice 通知的意思,当发生异常时对异常的处理方式,写一个功能比如叫 handler 处理异常,如下:
//全局异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler (Exception. class)
指明处理哪些异常,把所有异常都处理
@ResponseBody
public Map<String, Object> allExceptionHandler (
Exception exception) throws Exception
当发生异常时,返回相关的异常信息,这样就可以接收到发生异常时异常的对象,就可以得到异常信息
{
Map<String, Object> map = new
HashMap<String, Object>() ;
把异常信息封装到map中
map. put ("errorCode", 500) ;
发生异常时显示错误码
map.put ("errorMsg", exception. toString() ) ;
显示异常信息,会发生不同的异常,具体是什么异常已经被 Exception 接收到,所以可以从这里面获取异常信息。
return map;
最后返回异常信息
}
}
2、创建 controller,命名为 testcontroller。
3、加注解,写一个功能。制造一些异常,最后返回字符串。当请求 Controller 时执行int a = 5/0
这句话就会发生异常,这时全局处理器会捕获到这个异常,返回格式的异常信息。
@Controller
public class TestController
{
@RequestMapping ("/ show")
@ResponseBody
Public
String show ()
{
int a = 5/0;
return " show" ;
}
}
4、这两个类 GlobalExceptiorajandler.java,TestController.java 都在com.qianfeng.controller 这个包里,在启动程序中已经扫描 com. qianfeng. controller 包,所以都会创建它们的对象。
5、启动,访问路径是 show,现在是附属为0。
6、换成 int
[]
arr
=
new
int
[3];
System. out. println (arr[3])
;再进行访问,还是访问controller。这时就出现了下标越界。
这就是 springboot 中进行全局异常处理器的定义方式。