首页 > 其他分享 >springboot 自定义异常 全局异常处理器

springboot 自定义异常 全局异常处理器

时间:2023-06-28 14:22:14浏览次数:35  
标签:CustomException springboot 自定义 class public ex 异常 id

创建自定义异常类,继承 RuntimeException 类

1 public class CustomException extends RuntimeException{
2     public CustomException(String message){
3         super(message);
4     }
5 }

在指定情况下抛出该异常,代码如下:

 

@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
    @Autowired
    DishSercice dishSercice;
    @Autowired
    SetmealService setmealService;
    /**
     * 根据id删除分类,删除之前要先判断该分类是否已经关联菜品或套餐
     * @param id
     */
    @Override
    public void remove(Long id) {
        QueryWrapper<Dish> dishQueryWrapper=new QueryWrapper<>();
        dishQueryWrapper.eq("category_id",id);
        long count1=dishSercice.count(dishQueryWrapper);
        if(count1>0){
            //已关联菜品,抛出一个业务异常
            throw new CustomException("当前分类下关联了菜品,不能删除");
        }
        QueryWrapper<Setmeal> setmealQueryWrapper=new QueryWrapper<>();
        setmealQueryWrapper.eq("category_id",id);
        long count2 = setmealService.count(setmealQueryWrapper);
        if(count2>0){
            //已关联套餐,抛出一个业务异常
            throw new CustomException("当前分类下关联了套餐,不能删除");
        }

        //没出现异常,正常删除分类
        super.removeById(id);
    }
}

 

异常抛出后,进入到全局异常处理器,执行对该异常的处理方法

全局异常处理器:

/**
 * 全局异常处理
 */
@Slf4j
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
public class GlobalExceptionHandler {
    /*
    异常处理方法
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split=ex.getMessage().split(" ");
            String msg=split[2]+" 已存在";
            return R.error(msg);
        }
        return R.error("未知错误");
    }
    /*
    异常处理方法(针对自定义CustomException异常)
     */
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex){
        log.error(ex.getMessage());

        return R.error(ex.getMessage());
    }
}

 

 

 

 

 


 

标签:CustomException,springboot,自定义,class,public,ex,异常,id
From: https://www.cnblogs.com/zhuyankang/p/17511284.html

相关文章

  • 完美,自定义View实现Dribbble上动感的Gallery App Icon 动画
    之前在dribbble看到一个很好看的动画效果,很想要,遂仿之。也为了练一下自定义控件,有段时间了,现在整理出来dribbble地址:https://dribbble.com/shots/4761564思路拆解一下,还是比较简单,需要绘制的有:圆形背景太阳(圆形)山(三角形)云朵(圆角矩形+三个圆)需要进行的动画:太阳-旋转动画山......
  • BAT 大厂Android研发岗必刷真题:Android异常与性能优化相关面试问题
    今天来讲一讲在面试中碰到的Android异常与性能优化相关问题:1、anr异常面试问题讲解a)什么是anr?应用程序无响应对话框b)造成anr的原因?**主线程中做了耗时操作c)android中那些操作是在主线程呢?activity的所有生命周期回调都是执行在主线程的Service默认是执行在主线程的BroadcastR......
  • Java中的异常处理
    Java异常类层次结构图 在Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。 Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数......
  • pyqt5:自定义信号实现/pyqt 打开网页/app.exec_()
    1、自定义信号  2、pyqt打开网页importwebbrowserwebbrowser.open('https://www.zhihu.com/question/23711222')3、app.exec_()与sys.exit(app.exec_())区别:app.exec_()#等待app主循环结束的,并在结束后执行后面行的程序#sys.exit(app.exec_())#起到等待主循环结束......
  • 解决:远程连接mysql:报异常,1044 - Access denied for user ‘root‘@‘%‘ to database
    Navicat报错:使用Navicat远程连接,Docker中的mysql5.6时报异常,:1044-Accessdeniedforuser'root'@'%'todatabase'xxx'问题原因:(1)根本原因:远程连接用户权限不足!(2)直接原因:应该是创建远程连接用户‘root@%’时,没有添加访问数据库的权限。解决办法:#这里为刚才创建的root@......
  • 前端Vue自定义手机号文本格式化组件手机号码文本转星号
    前端Vue自定义手机号文本格式化组件,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13231效果图如下:cc-format-phone使用方法<!--phone:手机号isStar:是否转星号--><cc-format-phone:phone="":isStar="false"></cc-format-phone>......
  • 前端Vue自定义微信支付弹框dialog alert popup
    前端Vue自定义微信支付弹框dialogalertpopup, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13245效果图如下:实现代码如下:cc-payDialog使用方法<!--:money:支付金额 show:是否显示@cancel:取消 @success:确认支付--><cc-payDia......
  • SpringBoot接入Chat-GPT3
    创建一个APIKeyAPIKey创建网址:https://platform.openai.com/account/api-keys先登录OpenAI账号登陆后创建一个APIKey起一个名字点击创建,生成一个APIKey,记录下这个APIKey后续会用。可以在官网看到剩余容量,账号默认会送$18刀的容量,超过需要购买。在SpringB......
  • SpringBoot自定义starter
    1、先来一个简单的案例非常简单的工程结构controllerpackagecom.ly.demo.controller;importcom.ly.demo.service.MyStarterService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;import......
  • 自定义代码片段
    前言使用自定义代码片段可以快速生成代码片段,提升开发效率。使用在vscode中ctrl+shift+p,新建全局代码片段。写好模板,复制进这个网站https://snippet-generator.app/将生成的模板复制进文件中......