全局异常处理器

全局异常处理器

忘记中二的少年 Lv3

全局异常处理器

悟已往之不谏,知来者之可追:hash::first_quarter_moon::ant:

处理过程展示

image-20230923112514872

问题的来由

已知我有一个用户表用于存储用户的个人信息,并且设置了主键ID和username唯一

image-20230923113308037

于是我接着创建一个新用户admin,系统会报错

image-20230923120340502

上述错误的没有进行处理,因此当Mapper抛出Duplicate错误的时候,错误将抛出到调用mapper的service层,因为service层也没有做处理,因此错误继续向上抛至调用Service的Controller层,然后框架就会返回一个错误数据【该数据不符合我们返回值的规范,我们返回值规范是一个Result类】

image-20230923121310267

为此,定义一个全局异常处理器,捕获异常,并做统一处理:创建一个类,并添加上@RestControllerAdvice注解,该注解标识这个类是一个全局异常处理器,方法上添加@ExceptionHandler注解说明捕获的异常种类

1
2
3
4
5
6
7
8
9
@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(Exception.class)
public Result ex(Exception ex){
ex.printStackTrace(); //显示异常的堆栈信息
return Result.error("对不起,操作失败,请联系管理员...");
}
}
  • @ExceptionHandler:通过指定注解的value属性,说明要捕获的异常
  • @RestControllerAdvice:该注解由@ControllerAdvice + @ResponseBody组成,ResponseBody会将返回值转换为JSON传递到前端

设置完全局异常处理器之后再次发送请求查看结果可以看到服务端捕获到异常并打印了异常的堆栈信息:

image-20230923125348842

同时前端接收到的返回值也变成我们想要接收的数据类型

image-20230923125513819

  • 标题: 全局异常处理器
  • 作者: 忘记中二的少年
  • 创建于 : 2023-10-02 12:00:00
  • 更新于 : 2023-10-05 20:26:07
  • 链接: https://github.com/HandsomeXianc/HandsomeXianc.github.io/2023/10/02/全局异常处理器/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
此页目录
全局异常处理器