1. 自定义业务异常类:
/**
* 自定义业务异常类
*/
public class CustomException extends RuntimeException{
public CustomException(String message){
super(message);
}
}
2.throw抛出异常
如下业务场景中,在对分类删除之前通过Lambda表达式来增加一个判断,如果分类关联了菜品,就不能直接删除,抛出异常throw new CustomException("..."),这就是之前在1中定义的CustomException。
/**
* 根据id删除分类,删之前进行判断
* @param id
*/
@Override
public void romove(Long id) {
LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
//查询当前分类如果关类了菜品,抛出业务异常
dishLambdaQueryWrapper.eq(Dish::getCategoryId, id);
int count = dishService.count(dishLambdaQueryWrapper);
if(count > 0){
//已经关联菜品,抛出业务异常
throw new CustomException("当前分类下关联了菜品,不能删除");
}
//正常删除
super.removeById(id);
}
3.全局捕获异常
/**
* 异常处理方法
* @return
*/
@ExceptionHandler(CustomException.class)
public R<String> exceptionHandler(CustomException ex){
log.error(ex.getMessage());
return R.error(ex.getMessage());
}
打印异常信息,并在页面显示。