本篇內(nèi)容主要講解“Java中為什么要規(guī)范異常處理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Java中為什么要規(guī)范異常處理”吧!
網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計體驗!已為成都樓梯護欄等企業(yè)提供專業(yè)服務(wù)。
1. 為什么需要規(guī)范的異常處理?
首先,規(guī)范異常處理也是為了后期能更好的維護,減少程序出錯,別再哪里都try{}catch(){},對于有強迫癥的我,規(guī)范處理異常是必不可少的;規(guī)范異常處理能讓你代碼變得更加整潔、干凈。
2. 異常處理分類
異常處理方式:
service拋出異常,controller統(tǒng)一try{}catch(){}
對于一些io、http請求異常能直接處理的就直接try{}catch(){}處理
controller不處理異常,通過@ControllerAdvice 定義部分類型的異常進行處理
@ControllerAdvice public class WebExceptionHandler { @ExceptionHandler({ BizException.class }) @ResponseStatus(HttpStatus.OK) public String processBizException(HttpServletRequest request, BizException e) { LOG.error("BizException", e); request.setAttribute("msg", e.getMsg()); return "common/error"; } }
異常分類:
請求方式異常
參數(shù)異常,如:使用@RequestParam但請求時參數(shù)未傳框架會拋出異??梢匀植东@處理@ControllerAdvice
業(yè)務(wù)異常,如:用戶不存在、驗證碼失效,業(yè)務(wù)異常又可以根據(jù)不同的業(yè)務(wù)進行跟細(xì)化的分類,用戶異常、賬戶異常..
系統(tǒng)異常,如:參數(shù)不對導(dǎo)致查詢到的結(jié)果集多個
給請求方異常編碼分類:
public enum ReturnCodeEnum { SUCCESS("0000","請求成功"), MERCHANT_ERROR("0001","商戶異常"), ORDER_IS_NULL("0002","原始訂單不存在"), WAITING_PAYER_CONFIRM("9995","等待客戶確認(rèn)"), WAITING("9996","請求處理中"), FAIL("9997","請求失敗"), BIZ_ERROR("9998","業(yè)務(wù)異常"), SYSTEM_EXCEPTION("9999","系統(tǒng)異常"); }
內(nèi)部異常編碼分類:
/** * 銀行設(shè)置異常類 */ public class BankBizException extends BizException { private static final long serialVersionUID = 3536909333010163563L; /** 不存在通道分流設(shè)置 **/ public static final int CHANNEL_FLOW_IS_NULL = 101; /** 請求參數(shù)異常 **/ public static final int REQUEST_PARAM_ERRO = 102; /** 銀行渠道配置錯誤 **/ public static final int BANK_CHANNEL_ERRO = 103; /** 銀行渠道錯誤 **/ public static final int BANK_WAY_ERROR = 104; /** 子商戶的銀行渠道附屬信息為空 **/ public static final int BANK_SUBMERCHANT_INFO_IS_NULL = 105; /** 子商戶的銀行渠道附屬信息配置錯誤 **/ public static final int BANK_SUBMERCHANT_INFO_IS_ERROR = 106; /** 驗證銀行渠道傳的參數(shù)不符合要求 **/ public static final int BANK_CHANNEL_RULE_VALIDA_PARAM_ERROR = 107; /** agui 銀行渠道開放時間錯誤 **/ public static final int BANK_CHANNEL_DATE_ERRO = 108; }
這里為什么使用區(qū)分請求方和內(nèi)部方式統(tǒng)一管理異常編碼?
首先我們需要給到請求方統(tǒng)一的請求和響應(yīng)編碼表,能讓請求方根據(jù)不同的異常編碼進行分類處理,而對內(nèi)的異常編碼是為了平臺內(nèi)部統(tǒng)計或記錄異常信息,更有利于排查問題。業(yè)務(wù)異常的message要明確,可以直接返回給請求方定位錯誤,但系統(tǒng)異常message不能直接返回給請求方,可以提示為:系統(tǒng)異常,請稍后再試,因為的異常message可能是框架拋出來的,需要我們手動處理,我們只能定時記錄這些異常LOG日志,后期分類優(yōu)化。
到此,相信大家對“Java中為什么要規(guī)范異常處理”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!