全局异常处理器

1、创建全局异常处理器类

创建一个类并用@ControllerAdviceRestControllerAdvice注解标记。两者的区别在于:

  • @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);
         }
     }
 }

你可能感兴趣的:(java)