您好,登錄后才能下訂單哦!
本篇內容主要講解“AgileBoot項目內統一的錯誤碼怎么管理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“AgileBoot項目內統一的錯誤碼怎么管理”吧!
統一的錯誤碼描述,如果沒有統一的錯誤碼的話,錯誤描述散落在項目內的不同地方,同一個錯誤碼卻產生不同的錯誤描述,會導致歧義。
錯誤碼的層級,在與客戶端的交互過程中,我們可能需要根據錯誤的層級,來做不同的顯示。例如系統內部的錯誤,我們產生紅色的警告框。業務上操作類型的錯誤(例如用戶名不能超過64位),我們 則以正常的黃色提示框來提醒用戶。
i18n的處理。統一的錯誤碼管理,才使得國際化更好實現。我們可以給每一種錯誤碼定義唯一的key,來找到對應不同語言的錯誤描述。
集中的錯誤碼管理便于形成文檔供調用者參考。例如我們提供接口給其他團隊調用,可以提供給他們詳細的錯誤碼列表。
錯誤描述散落在項目的各個地方,一旦有改變錯誤描述的需求,要滿項目去尋找關聯的錯誤描述,然后逐一修改。這種情形很容易造成疏漏。
如果需要翻譯的話,這種隨意的字符串形式也很難去做國際化翻譯。
沒有準確的錯誤碼,在一些情形下,調用方需要根據你返回的錯誤碼進行不同的處理。如果沒有準確的錯誤碼,僅憑錯誤描述,比較難以實現。
錯誤碼的層級有助于客戶端對于不同級別的錯誤進行處理。比如有的錯誤進行隱藏,有的錯誤直接暴露給用戶。這邊我規劃了四層錯誤碼。 錯誤碼集合
1~9999 為保留錯誤碼 或者 常用錯誤碼
10000~19999 為內部錯誤碼
20000~29999 客戶端錯誤碼 (客戶端異常調用之類的錯誤)
30000~39999 為第三方錯誤碼 (代碼正常,但是第三方異常)
40000~49999 為業務邏輯 錯誤碼 (無異常,代碼正常流轉,并返回提示給用戶)
為了更好的分門別類,筆者給錯誤碼設定了模塊,便于客戶端的特殊處理。例如客戶端可以專門給某一個模塊的錯誤進行一個統一的處理。 模塊對應的數字在千位和百位。例如1XX01,XX代表了模塊的意義。
/** * 系統內的模塊 */ public enum Module { /** * 普通模塊 */ COMMON(0), /** * 權限模塊 */ PERMISSION(1), /** * 登錄模塊 */ LOGIN(2), /** * 數據庫模塊 */ DB(3), /** * 上傳 */ UPLOAD(4), /** * 用戶 */ USER(5), /** * 配置 */ CONFIG(6), /** * 職位 */ POST(7), ; private final int code; Module(int code) { this.code = code * 100; } public int code() {return code; } }
/** * 10000~19999是內部錯誤碼 例如 框架有問題之類的 */ public enum Internal implements ErrorCodeInterface { /** * 內部錯誤碼 */ INVALID_PARAMETER(Module.COMMON, 1, "參數異常"), UNKNOWN_ERROR(Module.COMMON, 2, "未知異常, 請查看系統日志"), GET_ENUM_FAILED(Module.COMMON, 3, "獲取枚舉類型失敗, 枚舉類: {}"), GET_CACHE_FAILED(Module.COMMON, 4, "獲取緩存失敗"), LOGIN_CAPTCHA_GENERATE_FAIL(Module.LOGIN, 1, "驗證碼生成失敗"), INVALID_TOKEN(Module.PERMISSION, 1, "token異常"), DB_INTERNAL_ERROR(Module.DB, 1, "數據庫異常: {}"), ; private final int code; private final String msg; private static final int BASE_CODE = 10000; Internal(Module module, int code, String msg) { this.code = BASE_CODE + module.code() + code; this.msg = msg; } @Override public int code() { return this.code; } @Override public String message() { return this.msg; } }
為了便于錯誤碼在編寫代碼時方便使用,我創建了ErrorCode這個類,并將四個層級的錯誤類一并放進這個類當中。
代碼中的例子
if (roleService.checkRoleNameUnique(getRoleId(), getRoleName())) { throw new ApiException(ErrorCode.Business.ROLE_NAME_IS_NOT_UNIQUE, getRoleName()); }
通過這樣的形式進行調用:ErrorCode.Business.ROLE_NAME_IS_NOT_UNIQUE
缺陷在于:
一個模塊內的錯誤碼上線是100個。 解決該問題的話,有兩種形式。一是:盡量設計比較通用的錯誤碼,粒度過細會導致錯誤碼不夠用。二是:使用重復的模塊,比如原來User模塊,再起一個User2模塊。
探討關于錯誤碼的設計,歡迎小伙伴留言評論指正。
Any corrections or suggestions are appreciated.
Agileboot是一個致力于規范、質量,健壯的前后端開發腳手架。
到此,相信大家對“AgileBoot項目內統一的錯誤碼怎么管理”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。