1、创建全局异常处理器类
创建一个类并用@ControllerAdvice或RestControllerAdvice注解标记。两者的区别在于:
@ControllerAdvice需配合@ResponseBody返回JSON数据@RestControllerAdvice(组合了@ControllerAdvice和@ResponseBody)默认返回JSON响应
@RestControllerAdvice
public class GlobalExceptionHandler {
// 异常处理方法
}
2、针对特定异常定制处理
2.1 业务异常处理
2.1.1 自定义业务异常类
public class BusinessException extends RuntimeException {
public BusinessException() {
}
public BusinessException(String message) {
super(message);
}
}
2.2.2 处理
@RestControllerAdvice
public class GlobalExceptionHandler {
// 异常处理方法
@ExceptionHandler(BusinessException.class)
public Result handleBusinessException(BusinessException ex) {
return Result.error(ex.getMessage());
}
}
2.2 其它异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
// 异常处理方法
// 比如处理sql异常
@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
//Duplicate entry 'zhangsan' for key 'employee.idx_username'
String message = ex.getMessage();
if (message.contains("Duplicate entry")) {
String username = message.split(" ")[2];
String msg = username + MessageConstant.ALREADY_EXISTS;
return Result.error(msg);
} else {
return Result.error(MessageConstant.UNKNOWN_ERROR);
}
}
}