全局异常处理类

全局异常处理类

创建步骤

  1. 定义一个自己的全局错误处理类GlobalExceptionHandler
  2. 创建一个ExceptionHandler类,主要是用@ControllerAdvice和 @ExceptionHandler处理错误信息
    以下说明各个注解的作用:
    • @ControllerAdvice(annotations = {RestController.class, Controller.class })//表示拦截类上加了RestController和Controller注解的controller
    • @ResponseBody//如果有方法需要返回json数据的就需要加上此注解,最终把结果封装成json数据返回
    • @Slf4j //写日志
    • @ExceptionHandler(SQLIntegrityConstraintViolationException.class)//表示这个方法处理的就是 SQLIntegrityConstraintViolationException中的错误信息,根据错误类型定
  3. 以上完成的是基本的异常处理,之后会通过枚举实现一些常用错误的封装,因为考虑到会有很多常用的报错信息,为了降低代码的重复和方便将来批量修改,在此基础上改动。

源代码示例

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class })//表示拦截类上加了RestController和Controller注解的controller
@ResponseBody//如果有方法需要返回json数据的就需要加上此注解,最终把结果封装成json数据返回
@Slf4j //写日志
public class GlobalExceptionHandler {

    /**
     * 异常处理方法
     * 一旦抛出SQLIntegrityConstraintViolationException这个异常,统一再次拦截处理
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.info(ex.getMessage());

        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2] + "已存在";
            return R.error(msg);
        }

        return R.error("未知错误");
    }
}

结果展示

全局异常处理类_第1张图片

未完待续!!!

你可能感兴趣的:(java)