Java的新專案學成線上筆記-day3(十)
阿新 • • 發佈:2019-01-05
5.2 異常處理流程
系統對異常的處理使用統一的異常處理流程:
1、自定義異常型別。
2、自定義錯誤程式碼及錯誤資訊。 3、對於可預知的異常由程式設計師在程式碼中主動丟擲,由SpringMVC統一捕獲。
可預知異常是程式設計師在程式碼中手動丟擲本系統定義的特定異常型別,由於是程式設計師丟擲的異常,通常異常資訊比較 齊全,程式設計師在丟擲時會指定錯誤程式碼及錯誤資訊,獲取異常資訊也比較方便。
4、對於不可預知的異常(執行時異常)由SpringMVC統一捕獲Exception型別的異常。
不可預知異常通常是由於系統出現bug、或一些不要抗拒的錯誤(比如網路中斷、伺服器宕機等),異常型別為 RuntimeException型別(執行時異常)。
5、可預知的異常及不可預知的執行時異常最終會採用統一的資訊格式(錯誤程式碼+錯誤資訊)來表示,最終也會隨 請求響應給客戶端。
異常丟擲及處理流程:
1、在controller、service、dao中程式設計師丟擲自定義異常;springMVC框架丟擲框架異常型別
2、統一由異常捕獲類捕獲異常,並進行處理
3、捕獲到自定義異常則直接取出錯誤程式碼及錯誤資訊,響應給使用者。
4、捕獲到非自定義異常型別首先從Map中找該異常型別是否對應具體的錯誤程式碼,如果有則取出錯誤程式碼和錯誤 資訊並響應給使用者,如果從Map中找不到異常型別所對應的錯誤程式碼則統一為99999錯誤程式碼並響應給使用者。
5、將錯誤程式碼及錯誤資訊以Json格式響應給使用者。
5.3 可預知異常處理
5.3.1 自定義異常類
在common工程定義異常型別。
package com.xuecheng.framework.exception; import com.xuecheng.framework.model.response.ResultCode; public class CustomException extends RuntimeException { private ResultCode resultCode; public CustomException(ResultCode resultCode) { //異常資訊為錯誤程式碼+異常資訊 super("錯誤程式碼:"+resultCode.code()+"錯誤資訊:"+resultCode.message()); this.resultCode = resultCode; } public ResultCode getResultCode(){ return this.resultCode; } }
5.3.2 異常丟擲類
package com.xuecheng.framework.exception;
import com.xuecheng.framework.model.response.ResultCode;
public class ExceptionCast {
//使用此靜態方法丟擲自定義異常
public static void cast(ResultCode resultCode){
throw new CustomException(resultCode);
}
}