一、全局异常处理机制

1.1 异常处理两种方式
- 编程式异常处理
- 代码中显式地编写处理异常的逻辑
- try-catch-finally
- 声明式异常处理
- 将异常处理的逻辑从具体的业务逻辑中分离出来
- 通过配置等方式进行统一的管理和处理
- 如
@Throws
或 @ExceptionHandler
1.2 基于注解异常声明异常处理
- 声明异常处理控制器类
统一定义异常处理handler方法!
@RestControllerAdvice
public class GlobalExceptionHandler {
}
- 声明异常处理hander方法
@ExceptionHandler(异常.class)
@ExceptionHandler(ArithmeticException.class)
public Object ArithmeticExceptionHandler(ArithmeticException e){
String message = e.getMessage();
System.out.println("message : " + message);
return message;
}
@ExceptionHandler(Exception.class)
public Object ExceptionHandler(Exception e){
String message = e.getMessage();
System.out.println("message : " + message);
return message;
}
- 普通的handler方法要使用@RequestMapping注解映射路径,发生对应的路径调用!
- 异常处理handler方法要@ExceptionHandler映射异常,发生对应的异常会调用!
- 异常处理handler方法和普通的handler方法参数接收和响应都一致!
- 配置文件扫描控制器类配置
确保异常处理控制类被扫描
<!-- 扫描controller error对应的包,将handler加入到ioc-->
@ComponentScan({
"com.wake.controller","com.wake.error"})

- 结果 result :


1.3 实战
- 定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解
@RestControllerAdvice
,加上这个注解就代表我们定义了一个全局异常处理器。
- 在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解
@ExceptionHandler
。通过@ExceptionHandler注解当中的value属性
来指定我们要捕获的是哪一类型的异常。