2023年11月29日发(作者:)
项⽬中异常处理⽅案
异常三种处理⽅案
实际项⽬中为了让⽤户有更好的体验,代码出现异常⼀般不会直接显⽰给⽤户,⽽是⾃⼰进⾏处理后返回,⼀般有三种处理⽅案,全局异常
处理、特定异常处理和⾃定义异常处理,下⾯开始会⼀⼀介绍
全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
//
全局异常
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error().message("执⾏了⾃定义异常");
}
}
特定异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
//
特定异常
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e){
e.printStackTrace();
return R.error().message("除数不能为零");
}
}
⾃定义异常处理(推荐)
1.⾸先⾃定义异常:
@Data
@AllArgsConstructor //
⽣成有参数构造⽅法
@NoArgsConstructor //
⽣成⽆参数构造
public class MyException extends RuntimeException {
private Integer code;//
状态码
private String msg;//
异常信息
}
2.编写异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {
//
⾃定义异常处理
@ExceptionHandler(MyException.class)
@ResponseBody
public R error(MyException e){
return R.error().code(e.getCode()).message(e.getMsg());
}
}
3.在可能出现异常处抛出⾃定义异常
贴出开发中常使⽤的异常统⼀处理类
//@ControllerAdvice
// @ResponseBody
@RestControllerAdvice // @ControllerAdvice+@ResponseBody
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
//
特定异常
@ExceptionHandler(ArithmeticException.class)
public R error(ArithmeticException e){
logger.error(e.getMessage(),e);
return R.error().message("除数不能为零");
}
@ExceptionHandler(NoHandlerFoundException.class)
public R handlerNoFoundException(Exception e) {
logger.error(e.getMessage(),e);
return R.error().code(404).message("路径不存在,请检查路径是否正确");
}
@ExceptionHandler(DuplicateKeyException.class)
public R handleDuplicateKeyException(DuplicateKeyException e){
logger.error(e.getMessage(), e);
return R.error().message("数据库中已存在该记录");
}
@ExceptionHandler(AuthorizationException.class)
public R handleAuthorizationException(AuthorizationException e){
logger.error(e.getMessage(), e);
return R.error().message("没有权限,请联系管理员授权");
}
@ExceptionHandler(NullPointerException.class)
public R handleAuthorizationException(NullPointerException e){
logger.error(e.getMessage(), e);
return R.error().message("空指针异常");
}
//
⾃定义异常处理
@ExceptionHandler(MyException.class)
public R error(MyException e){
logger.error(e.getMessage());
return R.error().code(e.getCode()).message(e.getMsg());
}
//
全局异常
@ExceptionHandler(Exception.class)
public R error(Exception e){
logger.error(e.getMessage(),e);
return R.error().message("出现异常");
}
}


发布评论