參數的合法性直接影響到程序的安全和性能,所以在進行相關操做前必須檢測對象是否爲null,是否爲blank,是否被初始化等等。面試
咱們先來看看SpringBoot 是如何來檢驗參數的。編程
驗證老是擺在第一位。安全
再來分析下Assert 類。 Assert 實際上是一個很是簡單的工具類。 app
Assert 類做爲一個工具類,不該該被實例化, 所以該類使用 abstract 進行修飾。 沒錯這就是常常遇到的面試題目, abstract 類不能被實例化。工具
除此以外 將構造方法使用 private 進行修飾也能夠防止類被實例化,這也是經常使用的編程技巧之一。 性能
Assert 類在SpringBoot 項目中被普遍使用。 ui
爲啥使用Assert 類? 由於使用Assert 能使得代碼更加簡潔明。三行代碼變成一行代碼,而且Controller 類不須要依賴具體的Exception 類,少依賴一種Exception, import語句減小一行。對象
@RequestMapping("edit") @RequiresPermissions(value = "fsdd-2") public String edit(@RequestParam @NonNull Long id, Model model) { Classify classify = classifyService.findById(id); /* if(classify == null){ throw new EntityNotFoundException("被修改的分類不能爲空" + id); }*/ Assert.notNullEntity(classify, "被修改的分類不能爲空" + id); model.addAttribute("classify", classify); return "manage/ClassifyController/edit"; }
修改某條記錄時 , id 參數是必須的,而且id不能爲空, 而且根據id查詢出來的實體對象也不能爲空。 固然還必須處於登錄狀態,而且擁有相關的角色權限。blog
到此咱們只是驗證了參數是否合法而且拋出了異常,可是並無告訴用戶後臺發生了什麼事情。it
使用 @ControllerAdvice 和 @ExceptionHandler 能夠捕獲不一樣類型的錯誤,而且根據錯誤的類型給前臺用戶相應的反饋。