背景:在日常开发中,需要经常处理异常;本文主要是讲述统一异常处理和自定义异常处理,统一异常处理是处理编译运行时候系统抛出的异常,是非检查异常UncheckedException ;
自定义异常是自己根据实际业务情况自定义抛出的异常。
上代码
1.统一异常处理
@RestControllerAdvice //这个注解标记得类都表示全局异常处理类,并返回json数据格式 @ExceptionHandler(value = Exception.class) // value可以指定处理哪种异常, Exception处理所有异常。
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public R handleException(Exception ex){
ex.printStackTrace();//输出异常,日志文件
log.error(ex.getMessage());
return R.error().message(ex.getMessage());
}
@ExceptionHandler(value = RuntimeException.class)
public R handleRuntimeException(RuntimeException runtimeException){
runtimeException.printStackTrace();//输出异常,日志文件
log.error(runtimeException.getMessage());
return R.error().message("编译时异常");
}
@ExceptionHandler(value = SQLException.class)
public R handleSqlException(SQLException sqlException){
sqlException.printStackTrace();//输出异常,日志文件
log.error(sqlException.getMessage());
return R.error().message("SQL异常");
}
@ExceptionHandler(value = ArithmeticException.class)
public R handleArithmeticException(ArithmeticException arithmeticException){
arithmeticException.printStackTrace();//输出异常,日志文件
log.error(arithmeticException.getMessage());
return R.error().message("数字异常");
}
//自定义的异常实际开发中必须手动抛出
@ExceptionHandler(value = StudentException.class)
public R handleYyghException(StudentException studentException){
studentException.printStackTrace();//输出异常,日志文件
log.error(studentException.getMessage());
return R.error().message(studentException.getMessage()).code(studentException.getCode());
}
}
2.自定义异常
需要继承RuntimeException接口
代码:
@Data
public class StudentException extends RuntimeException{
private Integer code;
private String message;
public StudentException(Integer code,String message) {
this.code = code;
this.message = message;
}
}
3.测试
结果:
结束!