异常处理-java-temp

Controller(控制层)、service业务逻辑层、dao持久层都会有异常,

我们遇到异常的方法都是向上抛出throw new RuntimeException(“xxxxx”);

抛给的就是你的调用方,dao抛给service,service抛给controller,controller再抛就抛给springmvc框架了;

如果不抛,直接捕获,你肯定不能所有的controller接口都写try catch,就会出现代码比较冗余;

所以应该把一个异常处理的逻辑代码统一在一个地方来写;

方案--@ControllerAdvice:

我们让它通通往上抛,抛给框架,由框架统一来处理,框架提供了一种机制,

即可以通过aop机制把控制层增强,就是通过@ControllerAdvice注解写一个增强类,

这个增强类就是把我们遇到的异常捕获

方案--@ExceptionHandler

它的作用是来进行异常处理

这两注释结合就可以统一的来处理系统中的异常;

结论:

Controller(控制层)、service业务逻辑层、dao持久层往上抛异常,最后controller抛给框架了,

这时由增强类来捕获异常来处理,要怎么处理是由你来决定的,所以这个增强类由你来写;

框架给你提供的就是上面这两个注解;它的原理就是面向切面aop编程;

就不用每个controller上try catch,代码冗余;

实现:

1 对异常信息进行规范

异常抛出去后,必须给前端用户有个提示出来;所以前后端约定一下,如果遇到异常在errMessage属性上展示出来;

即ExResponseMessage.java  作用就是和前端约定返回的异常信息模型

2 自定义自已的异常类型

ExCustomType.java 继承 RuntimeException异常,里面有我们的一些自定义属性errMessage,还要要重写父类的一些方法:

为了将来方便我们throw new 抛出异常,定义了个静态方法cast,和一个cast的重载方法;

使用:

   if (StringUtils.isBlank(dto.getName())) {

            //throw new RuntimeException("名称为空");

            //现在这里就改成抛出我们的异常了

           ImsBootException.cast("名称为空");

        }

这个看下代码写法即可:

//有些信息是自已的用这个方法

    public static void cast(String message){

        //这个异常类型其它就是我们的异常类型  ,上面是这个的用法

        throw new ExCustomType(message);

    }

    //有些信息是统一的如对象为空、非法参数等,用这个方法, 用法?

    public static void cast(ExMessageEnums error){

        throw new ExCustomType(error.getErrMessage());

    }

3 编写异常处理器 GlobalExceptionHandler.java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值