您好,登錄后才能下訂單哦!
??當程序出現錯誤時,我們不希望頁面直接返回“404”、“500”等信息,為了提高用戶體驗,我們需要統一處理異常,進行友好的提示!
??(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/ ?歡迎轉載,一起技術交流探討!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。