全局异常处理器
在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异常,可以对其错误信息进行处理,使错误原因更加清晰

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影响
对异常进一步处理后,前端就能获取到更详细的错误信息