Java基础 异常传递

概述

项目中经常会在方法A中调方法B,如果B出现了异常,A要获取到B的异常,并且在接口中返回,这是一个例子。大概就是需要发送消息到哪里,仅支持邮件、微信,其他的则出错,错误信息用一个列表装着,然后返回。m和n是控制发送时是否出现异常,很简单的,看下代码就懂。

controller

/**
     * 多层异常处理
     */
    @GetMapping("testLinkedException3")
    public ResponseResult<List<String>> testLinkedException3(@RequestParam("params") List<String> params,
                                                       @RequestParam("m") int m,
                                                       @RequestParam("n") int n){
        return ResponseResult.success(serviceA.functionA(params, m, n));
    }

serviceA

public List<String> functionA(List<String> params, int m, int n) {
        List<String> msg = new ArrayList<>();
        for (String param : params) {
            try{
                if(Objects.equals(param, "邮件")){
                    serviceB.sendEmail(m);
                }else if(Objects.equals(param, "微信")){
                    serviceB.sendWeChat(n);
                }else {
                    throw new IllegalArgumentException("异常参数:" + param);
                }
                msg.add("成功发送-"+param);
            }catch (Exception e){
                msg.add(param + "发送失败,失败原因:" + e.getMessage());
            }
        }
        return msg;
    }

serviceB

发送邮件

public boolean sendEmail(int n) {
        try{
            int res = 10 / n;
            return res > 0;
        }catch (Exception e){
            log.error("邮件发送异常,参数:{}", n, e);
            throw new MyException("邮件发送失败,参数:"+n);
        }

    }

发送微信

public boolean sendWeChat(int n) {
        try{
            int res = 10 / n;
            return res > 0;
        }catch (Exception e){
            throw e;
        }

    }

接口返回

正常处理的

参数:

params: 邮件,微信
m: 1
n: 1

响应:

{
  "code": 200,
  "message": "响应成功",
  "data": [
    "成功发送-邮件",
    "成功发送-微信"
  ]
}

邮件失败,微信成功

参数:

params: 邮件,微信,QQ
m: 0
n: 1

响应:

{
  "code": 200,
  "message": "响应成功",
  "data": [
    "邮件发送失败,失败原因:邮件发送失败,参数:0",
    "成功发送-微信",
    "QQ发送失败,失败原因:异常参数:QQ"
  ]
}

传多一个qq

参数:

params: 邮件,微信,QQ
m: 1
n: 1

响应:

{
  "code": 200,
  "message": "响应成功",
  "data": [
    "成功发送-邮件",
    "成功发送-微信",
    "QQ发送失败,失败原因:异常参数:QQ"
  ]
}

补充

异常抛出后,如果被上层方法捕获后,控制台是看不到报错信息的。所以需要log打印。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值