如果希望在程序执行出现错误的时候,不是直接返回前端一个500错误,导致前端什么也获取不到;
可以使用全局异常处理来解决。
使用@ControllerAdvice注解来实现
1.在项目中直接添加一个异常类就可以了,不需要再做其他操作
这个时候方法再由异常,就会调用该方法
/**
* 全局异常处理类
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 默认调用该方法
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e) {
e.printStackTrace();
return Result.fail();
}
}
2.如果希望使用项目中自己实现的异常,可以通过下面方式
第一步:在上面的全部异常处理类中新增一个自己实现异常的方法
/**
* 当抛出YyghException时,调用该方法
* @param e
* @return
*/
@ExceptionHandler(YyghException.class)
@ResponseBody
public Result error(YyghException e) {
e.printStackTrace();
return Result.fail();
}
第二步:在controller使用try…catch…抛出自己实现的异常
一般在实际开发中,都会使用try…catch…来包裹调用业务层的代码,这样出现异常时,就会调用自己定义的异常
try {
int i = 1 / 0;
} catch (Exception e) {
throw new YyghException("失败", 201);
}
3.@ControllerAdvice注解简介
@ControllerAdvice 既可以在传统的 SSM 项目中使用,也可以在 Spring Boot + Spring Cloud 微服务中使用
使用这个 Controller ,可以实现三个方面的功能:
全局异常处理:不再介绍
全局数据绑定:全局数据绑定功能可以用来做一些初始化的数据操作,我们可以将一些公共的数据定义在添加了 @ControllerAdvice 注解的类中,这样,在每一个 Controller 的接口中,就都能够访问导致这些数据。
全局数据预处理:对前端传递的数据做一些预处理
参考:
https://www.bilibili.com/video/BV1V5411K7rT?p=23
https://www.cnblogs.com/lenve/p/10748453.html