个人技术分享

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());
    }

        打印异常信息,并在页面显示。