您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用spring全家桶”,在日常操作中,相信很多人在怎么使用spring全家桶問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用spring全家桶”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
使用過spring全家桶的都應該知道現如今大部分系統對于業務邏輯的異常處理,都是基于springmvc的統一異常處理器進行攔截包裝后,返回給前端一個Result(包含code,業務異常msg等消息)結果對象,前端可以根據code以及msg進行友好提示。如下:
自定義業務邏輯異常
/** * @author meilin.huang * @version 1.0 * @date 2019-01-05 2:19 PM */ public class BusinessRuntimeException extends RuntimeException { private static final long serialVersionUID = -789021883759549647L; /** * 異常碼 */ private Integer code; public BusinessRuntimeException(String msg) { super(msg); } public BusinessRuntimeException(Integer code, String msg) { super(msg); this.code = code; } public Integer getCode() { return code; } }
定義統一異常攔截器
/** * @author meilin.huang * @version 1.0 * @date 2018-12-18 11:03 AM */ @RestControllerAdvice public class GlobalExceptionHandler { private static Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(Exception.class) public Result handleException(Exception e) { if (e instanceof BusinessException || e instanceof BusinessRuntimeException) { return Result.error(e.getMessage()); } return Result.serverError(); } }
就可以在業務邏輯中隨意拋自定義的業務邏輯異常
public void updateUser(UserForm userForm) { User user = getById(userForm.getId); if (user == null) { throw new BusinessRuntimeException("不存在該用戶"); } // 校驗用戶狀態枚舉值是否存在,當然這也可以通過注解方式在controller層就校驗了,這里只是舉例 if (!EnumUtils.isExist(StatusEnum.values(), userForm.getStatus())) { throw new BusinessRuntimeException("狀態枚舉值錯誤"); } // ........... //余下可能還有一些其他的業務邏輯判斷校驗,并拋異常的代碼 }
通過上面業務判斷可以發現,其實這些業務邏輯的判斷處理,基本都是基于if(...) {throw new BusinessRuntimeException(...)}
于是其實可以借鑒Spring中的org.springframework.util.Assert
斷言類進行處理,可以減少大量的if判斷。具體可參考如下:
首先定義一個業務斷言類
/** * 業務斷言 * @author meilin.huang * @version 1.0 * @date 2019-07-14 18:24 */ public final class BusinessAssert { /** * 斷言對象不為空 * @param object 對象 * @param msg 不滿足斷言的異常信息 */ public static void notNull(Object object, String msg) { state(object != null, msg); } public static void notNull(Object object, Supplier<String> supplier) { state(object != null, supplier); } /** * 斷言字符串不為空 * @param str 字符串 * @param msg 不滿足斷言的異常信息 */ public static void notEmpty(String str, String msg) { state(!StringUtils.isEmpty(str), msg); } /** * 斷言集合不為空 * @param collection 集合 * @param msg 不滿足斷言的異常信息 */ public static void notEmpty(Collection<?> collection, String msg) { state(!CollectionUtils.isEmpty(collection), msg); } /** * 斷言一個boolean表達式 * @param expression boolean表達式 * @param message 不滿足斷言的異常信息 */ public static void state(boolean expression, String message) { if (!expression) { throw new BusinessRuntimeException(message); } } /** * 斷言一個boolean表達式,用于需要大量拼接字符串以及一些其他操作等 * @param expression boolean表達式 * @param supplier msg生產者 */ public static void state(boolean expression, Supplier<String> supplier) { if (!expression) { throw new BusinessRuntimeException(supplier.get()); } } }
于是乎就可以在業務邏輯代碼中如下使用啦:
public void updateUser(UserForm userForm) { User user = getById(userForm.getId); BusinessAssert.notNull(user, "不存在該用戶"); // 校驗用戶狀態枚舉值是否存在,當然這也可以通過注解方式在controller層就校驗了,這里只是舉例 BusinessAssert.state(EnumUtils.isExist(StatusEnum.values(), userForm.getStatus()), "狀態枚舉值錯誤"); // ........... //余下可能還有一些其他的業務邏輯判斷校驗,并拋異常的代碼 }
到此,關于“怎么使用spring全家桶”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。