亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第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 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1
獲贊與收藏
3

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消