全局异常处理器

简单介绍一种全局处理Springboot项目中异常的方式

全局异常处理器

在Springboot项目中,如果处理异常全部使用try……catch的形式会显得代码过于臃肿,也不方便

所以可以创建一个类,用来处理全局异常

1
2
3
4
5
6
7
8
9
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public Result handleException(Exception e) {
        log.error("系统异常:", e);
        return Result.error("服务器错误,请联系管理员!");
    }
}

上述代码即可全局捕获异常,可以进一步细化代码,根据不同的异常提示不同的信息,下面以DuplicateKeyException为例

如图,此时报了DuplicateKey异常,可以对其错误信息进行处理,使错误原因更加清晰

image-20250912151317964

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public Result handleException(Exception e) {
        log.error("系统异常:", e);
        return Result.error("服务器错误,请联系管理员!");
    }

    @ExceptionHandler
    public Result handleDuplicateKeyException(DuplicateKeyException e) {
        log.error("数据重复异常:", e);
        // 对错误信息进行处理
        String message = e.getMessage();
        int i = message.indexOf("Duplicate entry");
        String errMsg = message.substring(i);
        String[] arr = errMsg.split(" ");
        return Result.error(arr[2] + "已存在");
    }
}

框架匹配处理异常时,会按照继承关系从下往上匹配,所以不用担心handleDuplicateKeyException被handleException影响

对异常进一步处理后,前端就能获取到更详细的错误信息

image-20250912152251635 image-20250912152321589
本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计