統(tǒng)一異常處理

無標(biāo)題-2023-07-14-1503.png
//異常信息
@Getter  
public enum ResponseCode {  

    SUCCESS(0, "Success"),  

    INTERNAL_ERROR(1, "服務(wù)器內(nèi)部錯誤"),  

    USER_INPUT_ERROR(2, "用戶輸入錯誤"),  

    AUTHENTICATION_NEEDED(3, "Token過期或無效"),  

    FORBIDDEN(4, "禁止訪問"),  

    TOO_FREQUENT_VISIT(5, "訪問太頻繁帜平,請休息一會兒");  

    private final int code;  

    private final String message;  

    private final Response.Status status;  

    ResponseCode(int code, String message, Response.Status status) {  
        this.code = code;  
        this.message = message;  
        this.status = status;  
    }  

    ResponseCode(int code, String message) {  
        this(code, message, Response.Status.INTERNAL_SERVER_ERROR);  
    }  

}
/**
返回消息類
**/
@Getter  
@Setter  
public class GenericResponse<T> {  

    private int code;  

    private T data;  

    private String message;  

    public GenericResponse() {};  

    public GenericResponse(int code, T data) {  
        this.code = code;  
        this.data = data;  
    }  

    public GenericResponse(int code, T data, String message) {  
        this(code, data);  
        this.message = message;  
    }  

    public GenericResponse(ResponseCode responseCode) {  
        this.code = responseCode.getCode();  
        this.data = null;  
        this.message = responseCode.getMessage();  
    }  

    public GenericResponse(ResponseCode responseCode, T data) {  
        this(responseCode);  
        this.data = data;  
    }  

    public GenericResponse(ResponseCode responseCode, T data, String message) {  
        this(responseCode, data);  
        this.message = message;  
    }  
}

/**
自定義異常
**/

@Getter  
public class AuroraRuntimeException extends RuntimeException {  

    private final ResponseCode code;  

    public AuroraRuntimeException() {  
        super(String.format("%s", ResponseCode.INTERNAL_ERROR.getMessage()));  
        this.code = ResponseCode.INTERNAL_ERROR;  
    }  

    public AuroraRuntimeException(Throwable e) {  
        super(e);  
        this.code = ResponseCode.INTERNAL_ERROR;  
    }  

    public AuroraRuntimeException(String msg) {  
        this(ResponseCode.INTERNAL_ERROR, msg);  
    }  

    public AuroraRuntimeException(ResponseCode code) {  
        super(String.format("%s", code.getMessage()));  
        this.code = code;  
    }  

    public AuroraRuntimeException(ResponseCode code, String msg) {  
        super(msg);  
        this.code = code;  
    }  

}

/**
全局Rest異常處理類
**/
Log4j2  
@RestControllerAdvice  
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {  

    /**  
     * 定義要捕獲的異常 可以多個 @ExceptionHandler({})     *  
     * @param request  request  
     * @param e        exception  
     * @param response response  
     * @return 響應(yīng)結(jié)果  
     */  
    @ExceptionHandler(AuroraRuntimeException.class)  
    public GenericResponse customExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {  
        AuroraRuntimeException exception = (AuroraRuntimeException) e;  

       if (exception.getCode() == ResponseCode.USER_INPUT_ERROR) {  
           response.setStatus(HttpStatus.BAD_REQUEST.value());  
       } else if (exception.getCode() == ResponseCode.FORBIDDEN) {  
           response.setStatus(HttpStatus.FORBIDDEN.value());  
       } else {  
           response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());  
       }  

        return new GenericResponse(exception.getCode(), null, exception.getMessage());  
    }  

    @ExceptionHandler(NotLoginException.class)  
    public GenericResponse tokenExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {  
        log.error("token exception", e);  
        response.setStatus(HttpStatus.FORBIDDEN.value());  
        return new GenericResponse(ResponseCode.AUTHENTICATION_NEEDED);  
    }  

}
/**
用戶拋異常
**/
public User getUserInfo(Long userId) {  
    // some logic

    User user = daoFactory.getExtendedUserMapper().selectByPrimaryKey(userId);  
    if (user == null) {  
        throw new AuroraRuntimeException(ResponseCode.USER_INPUT_ERROR, "用戶id不存在");  
    }

    // some logic
    ....
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辛孵,一起剝皮案震驚了整個濱河市帜慢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泄鹏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昔逗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)篷朵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門勾怒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婆排,“玉大人,你說我怎么就攤上這事笔链《沃唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵鉴扫,是天一觀的道長赞枕。 經(jīng)常有香客問我,道長坪创,這世上最難降的妖魔是什么炕婶? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮莱预,結(jié)果婚禮上柠掂,老公的妹妹穿的比我還像新娘。我一直安慰自己锁施,他們只是感情好陪踩,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悉抵,像睡著了一般肩狂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姥饰,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天傻谁,我揣著相機(jī)與錄音,去河邊找鬼列粪。 笑死审磁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岂座。 我是一名探鬼主播态蒂,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼费什!你這毒婦竟也來了钾恢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸳址,失蹤者是張志新(化名)和其女友劉穎瘩蚪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稿黍,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疹瘦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巡球。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片言沐。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡邓嘹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出险胰,到底是詐尸還是另有隱情吴超,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布鸯乃,位于F島的核電站,受9級特大地震影響跋涣,放射性物質(zhì)發(fā)生泄漏缨睡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一陈辱、第九天 我趴在偏房一處隱蔽的房頂上張望奖年。 院中可真熱鬧,春花似錦沛贪、人聲如沸陋守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽水评。三九已至,卻和暖如春媚送,著一層夾襖步出監(jiān)牢的瞬間中燥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工塘偎, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疗涉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓吟秩,卻偏偏與公主長得像咱扣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涵防,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容