springboot统一异常-微服务体系中的使用规范

@RestControllerAdvice(annotations = RestController.class)

这个注解百度很多,这里就不重复诉说了。主要是被捕获的异常以何种形式进行返回,我这里分成自定义异常与非自定义异常,其中自定义异常的errCode统一为0

代码中首先日志收集具体报错服务及信息,然后再根据当前的运行环境(pro)区别的返回报错信息,正常业务异常统一用自定义异常,使用的R.fail的方法,其返给前端的code是201,反之全部用常规异常的处理方式,返给前端的code就是202了。如果按照这个规范编写统一异常,即区分了运行环境,又区分异常场景。

public R sendErrMsg(String msg, String allMsg, int errCode) {
    Tool.log.error("服务名称:{},端口:{},编码:{},消息:{}", name, port, errCode, allMsg);
    if (profiles.equals("pro")) {
        if (errCode == 0) {
            //正常业务提示异常
            return R.fail(msg, errCode);
        } else {
            //非正常参数,代码异常
            return R.error("请求错误,请联系管理员处理或者稍后重试!", errCode);
        }
    } else {
        if (errCode == 0) {
            return R.fail(msg, errCode);
        } else {
            return R.error(msg, errCode);
        }
    }
}

//自定义异常
@ResponseBody
@ExceptionHandler(value = Rexception.class)
R MyException(Rexception e, Object body) {
    return sendErrMsg(e.getMessage(), e.getMessage(), 0);
}

//参数校验错误
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(value = MethodArgumentNotValidException.class)
R MethodArgumentNotValidException(MethodArgumentNotValidException e) {
    String message = StringUtils.collectionToCommaDelimitedString(
            e.getBindingResult().getAllErrors()
                    .stream()
                    .map(DefaultMessageSourceResolvable::getDefaultMessage)
                    .collect(Collectors.toList())
    );
    return sendErrMsg(message, ExceptionUtil.stacktraceToString(e), 1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ2738671

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值