为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第11天 自定义异常,返回错误信息

标签:
Java

课程名称:Spring Cloud 进阶 Alibaba 微服务体系自媒体实战
课程章节: 第3章 开发通行证有关服务
主讲老师: 风间影月

课程内容

对于一些小系统来讲,出现异常直接抛就行,甚至不规范的使用,但是我们这里规范一些,引入自定义异常,这么一来可以更加规范我们的项目。

但是本课程的学习当中,希望将系统做大做强,以及为后期将系统改成微服务化做准备。

如果对异常信息进行了封装。具体参考如下:

package com.imooc.exception;

import com.imooc.grace.result.ResponseStatusEnum;

/**
 * 优雅处理异常,统一封装
 */
public class GraceException {

    public static void display(ResponseStatusEnum responseStatus) {
        throw new MyCustomException(responseStatus);
    }

}
package com.imooc.exception;

import com.imooc.grace.result.ResponseStatusEnum;
import com.imooc.utils.MD5Utils;

/**
 * 自定义异常
 * 目的:1. 统一异常处理和管理
 *      2. service与controller错误解耦,不会被service返回的类型而限制
 *
 * RuntimeException: 没有侵入性,如果继承Exception,则代码中需要使用try/catch
 */
public class MyCustomException extends RuntimeException {

    private ResponseStatusEnum responseStatus;

    public MyCustomException(ResponseStatusEnum responseStatus) {
        super("异常状态码: " +  responseStatus.status() + "; 异常信息: " + responseStatus.msg());
        this.responseStatus = responseStatus;
    }

    public ResponseStatusEnum getResponseStatus() {
        return responseStatus;
    }

    public void setResponseStatus(ResponseStatusEnum responseStatus) {
        this.responseStatus = responseStatus;
    }
}
package com.imooc.exception;

/**
 * 统一异常拦截处理
 * 可以针对异常类型进行补货处理,然后返回信息到页面
 */
@ControllerAdvice
public class GraceExceptionHandler {

    final static Logger logger = LoggerFactory.getLogger(GraceExceptionHandler.class);

    /**
     * 只要抛出MyCustomException,就会被此方法拦截到,随后可以自定义处理
     * @param e
     * @return
     */
    @ExceptionHandler(MyCustomException.class)
    @ResponseBody
    public GraceJSONResult returnMyException(MyCustomException e) {
        logger.error(e.getMessage());
        e.printStackTrace();
        return GraceJSONResult.exception(e.getResponseStatus());
    }

   }
// 最终只需要调用如下方法即可
GraceException.display(ResponseStatusEnum.SMS_NEED_WAIT_ERROR);

课程收获

在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeException的方式来实现。

通常情况下是捕获三类异常
1.业务异常:BusinessException

2.系统异常 :SystemException

3.其他异常:利用@ExceptionHandler(RuntimeException.class)去捕获

ExceptionAdvice类捕获以上三类异常,并返回自定义类型格式数据


课程截图

https://img1.sycdn.imooc.com//632493490001e21224301478.jpg

https://img1.sycdn.imooc.com//6324935b00015e2e25601486.jpg

https://img1.sycdn.imooc.com//6324936a00010aa225901502.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消