统一异常处理

全局异常处理:

新建exception,在包下新建GlobalExceptionHandler.java类,添加方法:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class) //@ExceptionHandler统一处理方法抛出的异常
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }
}

在控制器里添加异常进行测试:

int a = 10/0;

浏览器访问对应路径返回结果:



特定异常处理:

GlobalExceptionHandler.java里添加特定除以0的ArithmeticException异常处理方法

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class) //@ExceptionHandler统一处理方法抛出的异常
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }

    @ExceptionHandler(ArithmeticException.class) //处理特定ArithmeticException异常
    @ResponseBody
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了自定义异常");
    }
}

浏览器访问对应路径返回结果:


自定义异常处理:

在exception包下新建自定义异常类MyException.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor //全参构造器
@NoArgsConstructor  //空参构造器
public class MyException extends RuntimeException {
    private Integer code; //状态码
    private String msg; //异常信息
}

GlobalExceptionHandler.java里添加自定义MyException异常处理方法:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class) //@ExceptionHandler统一处理方法抛出的异常
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }

    @ExceptionHandler(ArithmeticException.class) //处理特定ArithmeticException异常
    @ResponseBody
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了自定义异常");
    }

    @ExceptionHandler(MyException.class) //处理自定义的MyException异常
    @ResponseBody
    public R error(MyException e){
        e.printStackTrace();
        return R.error().message(e.getMsg()).code(e.getCode());
    }
}

控制器方法里手动抛出自定义的异常:

try {
    int a = 10/0;
} catch (Exception e) {
    throw new MyException(20001,"自定义的MyException异常");
}

浏览器访问对应路径返回结果: