91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用spring全家桶

發布時間:2021-11-17 11:14:27 來源:億速云 閱讀:126 作者:iii 欄目:大數據

這篇文章主要介紹“怎么使用spring全家桶”,在日常操作中,相信很多人在怎么使用spring全家桶問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用spring全家桶”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

使用過spring全家桶的都應該知道現如今大部分系統對于業務邏輯的異常處理,都是基于springmvc的統一異常處理器進行攔截包裝后,返回給前端一個Result(包含code,業務異常msg等消息)結果對象,前端可以根據code以及msg進行友好提示。如下:

  1. 自定義業務邏輯異常

/**
 * @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;
    }
}
  1. 定義統一異常攔截器

/**
 * @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();
    }
}
  1. 就可以在業務邏輯中隨意拋自定義的業務邏輯異常

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判斷。具體可參考如下:

  1. 首先定義一個業務斷言類

/**
 * 業務斷言
 * @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());
        }
    }
}
  1. 于是乎就可以在業務邏輯代碼中如下使用啦:

public void updateUser(UserForm userForm) {
  User user = getById(userForm.getId);
  BusinessAssert.notNull(user, "不存在該用戶");
  // 校驗用戶狀態枚舉值是否存在,當然這也可以通過注解方式在controller層就校驗了,這里只是舉例
  BusinessAssert.state(EnumUtils.isExist(StatusEnum.values(), userForm.getStatus()), "狀態枚舉值錯誤");

  // ...........
  //余下可能還有一些其他的業務邏輯判斷校驗,并拋異常的代碼
}

到此,關于“怎么使用spring全家桶”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

威海市| 久治县| 湛江市| 厦门市| 淮滨县| 夏邑县| 滁州市| 隆子县| 赤水市| 安阳市| 琼中| 买车| 剑阁县| 华阴市| 芜湖县| 宜黄县| 清镇市| 读书| 安平县| 肥城市| 辽宁省| 寻乌县| 桐庐县| 磐安县| 晋中市| 贞丰县| 宣恩县| 桦川县| 股票| 延川县| 惠来县| 京山县| 新平| 涟源市| 定襄县| 陇西县| 天门市| 安国市| 涡阳县| 海口市| 米林县|