亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot項目實戰之統一(全局、特殊、自定義)異常處理

發布時間:2020-08-01 17:52:51 來源:網絡 閱讀:552 作者:lindaxia 欄目:編程語言
一、應用場景

??當程序出現錯誤時,我們不希望頁面直接返回“404”、“500”等信息,為了提高用戶體驗,我們需要統一處理異常,進行友好的提示!

SpringBoot項目實戰之統一(全局、特殊、自定義)異常處理

二、異常分類

??(1)統一異常處理:推薦,只要出現異常,返回統一結果。

??(2)特殊異常處理:一般不使用,因為無法準確定位到項目的異常。

??(3)自定義異常處理:自己創建異常,實現返回結果,需要手動調用(try...catch)才會執行!

三、實現代碼

?? 異常實現的底層原理AOP(面向切面編程),即不改變原有的代碼,實現某個功能。

??<font color=red>注意:特殊異常處理的優先級高于統一異常處理!</font>

/**
 * @BelongProjecet: guli-framework-parent
 * @BelongPackage: com.guliedu.eduservice.handler
 * @ClassName: GlobalExceptionHandler
 * @Description: 【推薦>方式一】統一異常處理:只要出現異常,返回統一結果
 *               【方式二】特殊異常處理:如果出現ArithmeticException異常,才會處理
 *                          特殊異常處理>統一異常處理(優先級)
 *               【推薦>方式三】自定義異常處理:自己創建異常,自己實現返回結果
 * @Copyright: 2019-xxx-Powered by 研發四部
 * @Author: LinHong
 * @CreateDate: 2019/11/13 20:42
 * @Version: V1.0
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 功能描述
     *
     * @MethodName:
     * @MethodParam:
     * @Return:
     * @Description: 處理全局異常的方法
     * @Author: LinHong
     * @CreateDate: 2019/11/13 20:47
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e) {
        e.printStackTrace();
        return R.error().message("執行了全局異常處理方法......");

    }

    /**
     * 功能描述
     *
     * @MethodName: error
     * @MethodParam: [e]
     * @Return: com.guliedu.common.R
     * @Description: 處理特殊異常的方法
     * @Author: LinHong
     * @CreateDate: 2019/11/13 20:52
     */
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public R error(ArithmeticException e) {
        e.printStackTrace();
        return R.error().message("執行了特殊異常處理方法......");

    }
    /**
     * 功能描述
     * @MethodName: error
     * @MethodParam: [e]
     * @Return: com.guliedu.common.R
     * @Description: 自定義異常--需要手動拋出異常!!!
     * @Author: LinHong
     * @CreateDate: 2019/11/14 10:05
     */
    @ExceptionHandler(EduException.class)
    @ResponseBody
    public R error(EduException e) {
       // EduException e1 = new EduException(20001,"自定義異常測試,操作失敗......";
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());

    }

}

EduException自定義異常類

繼承運行時異常類,添加兩個屬性即可:狀態碼、返回信息。

/**
 * @BelongProjecet: guli-framework-parent
 * @BelongPackage: com.guliedu.eduservice.handler
 * @ClassName: EduException
 * @Description: 自定義異常
 * @Copyright: 2019-xxx-Powered by 研發四部
 * @Author: LinHong
 * @CreateDate: 2019/11/14 9:58
 * @Version: V1.0
 */
@Data
//無參構造
@NoArgsConstructor
//有參構造
@AllArgsConstructor
public class EduException extends RuntimeException{
    //狀態碼
    private Integer code;
    //返回信息
    private String msg;

}

(自定義異常測試)異常位置

注意:自定義異常需要手動調用,才會執行!

    /**
         *測試特殊異常 ArithmeticException
         */
        try {
            int i =666/0;
        } catch (Exception e) {
            //拋出自定義異常
            throw new EduException(20001,"自定義異常測試,執行此操作.......");
        }

R 返回結果類(附)

/**
 * @BelongProjecet: guli-framework-parent
 * @BelongPackage: com.guliedu.common
 * @ClassName: R
 * @Description: 返回結果類--鏈式編程
 * @Copyright: 2019-xxx-Powered by 研發四部
 * @Author: LinHong
 * @CreateDate: 2019/11/13 14:32
 * @Version: V1.0
 */
@Data
public class R {
    private boolean success;
    private Integer code;
    private String message;
    private Map<String, Object> data = new HashMap<>();
    //構造方法私有化
    private R(){}
    //對外提供可以訪問方法
    public static R ok(){
        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCode.OK);
        r.setMessage("成功");
        return r;
    }

    public static R error(){
        R r = new R();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失敗");
        return r;
    }

    public R message(String message){
        this.setMessage(message);
        return this;
    }

    public R code(Integer code){
        this.setCode(code);
        return this;
    }

    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    public R data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
}

ResultCode數據狀態碼接口(附)

package com.guliedu.common;

/**
 * @BelongProjecet: guli-framework-parent
 * @BelongPackage: com.guliedu.common
 * @ClassName: ResultCode
 * @Description: 編寫統一結果返回,創建公共模塊--定義返回數據狀態碼
 * @Copyright: 2019-xxx-Powered by 研發四部
 * @Author: LinHong
 * @CreateDate: 2019/11/13 14:20
 * @Version: V1.0
 */
public interface ResultCode {
    //成功
    int OK = 20000;
    //失敗
    int ERROR =20001;
    //用戶名或密碼錯誤
    int LOGIN_ERROR =20002;
    //權限不足
    int ACCEAA_ERRORR=20003;
    //遠程調用失敗
    int REMOTE_ERROR = 20004;
    //重復操作
    int REPEAT_ERROR = 20005;
}

?學習、實戰、總結、分享,讓生活變得更美好!
?林大俠CSDN博客:https://coding0110lin.blog.csdn.net/ ?歡迎轉載,一起技術交流探討!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁夏| 师宗县| 元氏县| 凤冈县| 南华县| 昆明市| 贡嘎县| 广水市| 盘锦市| 富宁县| 天台县| 河北区| 崇仁县| 麦盖提县| 崇阳县| 盘锦市| 海丰县| 离岛区| 龙州县| 大方县| 沾益县| 曲沃县| 平阳县| 习水县| 石渠县| 镇康县| 潜江市| 永新县| 治县。| 永兴县| 稻城县| 中方县| 华安县| 天祝| 杭州市| 连云港市| 平阳县| 苏尼特左旗| 阿克陶县| 夏河县| 泸西县|