统一异常处理
全局异常处理:
新建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异常");
}
浏览器访问对应路径返回结果: