SpringBoot 如何優雅的進行引數校驗
引數的合法性直接影響到程式的安全和效能,因此在進行相關操作前必須檢測物件是否為null,是否為blank,是否被初始化等等。
我們先來看看SpringBoot 是如何來檢驗引數的。
驗證總是擺在第一位。
再來分析下Assert 類。 Assert 其實是一個非常簡單的工具類。
Assert 類作為一個工具類,不應該被例項化, 因此該類使用 abstract 進行修飾。 沒錯這就是經常遇到的面試題目, abstract 類不能被例項化。
除此之外 將構造方法使用 private 進行修飾也可以防止類被例項化,這也是常用的程式設計技巧之一。
Assert 類在SpringBoot 專案中被廣泛使用。
為啥使用Assert 類? 因為使用Assert 能使得程式碼更加簡潔明。三行程式碼變成一行程式碼,並且Controller 類不需要依賴具體的Exception 類。
@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查詢出來的實體物件也不能為空。 當然還必須處於登陸狀態,並且擁有相關的角色許可權。
到此我們只是驗證了引數是否合法並且丟擲了異常,但是並沒有告訴使用者後臺發生了什麼事情。
使用 @ControllerAdvice 和 @ExceptionHandler 可以捕獲不同型別的錯誤,並且根據錯誤的型別給前臺使用者相應的反饋。
相關推薦
SpringBoot 如何優雅的進行引數校驗
引數的合法性直接影響到程式的安全和效能,因此在進行相關操作前必須檢測物件是否為null,是否為blank,是否被初始化等等。 我
SpringMVC自定義註解進行引數校驗
在我的另一篇部落格中(SpringMVC),學習瞭如何使用Spring MVC結合Hibernate的校驗框架validation(它和hibernate沒有任何關係)對引數進行校驗。在實際專案中,引數的校驗邏輯可能比較複雜,這時我們可以自定義註解來實現引數校驗,下面是一個簡單的例子。 po
SpringMVC自定義註解進行引數校驗(以校驗列舉值是否合法為例)
pom引入springMVC依賴,以springboot專案為例 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-
Spring Boot 使用hibernate validator進行引數校驗
demo 實體類 public class UserBean { @NotBlank(message="使用者名稱不能為空") private String userName; @NotBlank(message="年齡不能為空") @P
eggJS egg-joi優雅的引數校驗
剛剛接觸egg沒多久,一直使用egg自帶的validate做校驗,emmm~用過的都知道,之前用hapi的時候感覺joi用著很舒服,然後在網上找了一個外掛egg-joi。 我的專案結構 安裝依賴 npm i egg-joi --save 引入
測試開發專題:如何在spring-boot中進行引數校驗
上文我們討論了spring-boot如何去獲取前端傳遞過來的引數,那傳遞過來總不能直接使用,需要對這些引數進行校驗,符合程式的要求才會進行下一步的處理,所以本篇文章我們主要討論spring-boot中如何進行引數校驗。 ### lombok使用介紹 在介紹引數校驗之前,先來了解一下lombok的使用,因為
springmvc、springboot 引數校驗
引數校驗在專案中是必不可少的,不僅前端需要校驗,為了程式的可靠性,後端也需要對引數進行有效性的校驗。下面將介紹在springmvc或springboot專案中引數校驗的方法 準備工作: 引入校驗需要用到的依賴 首先放上我們的測試物件 方法一、
SpringBoot引數校驗--List型別
一般我們定義了DTO來接收引數,然後使用@validated來驗證DTO裡面的校驗規則。當我們的介面接收的引數為List<E>時,可以使用本文的方法進行校驗。 包含驗證規則的實體類: import io.swagger.annotations.ApiModel; i
springboot 統一引數校驗配置
採坑 1號坑: 引數長度校驗時特殊字元經過url編碼時 1位變3位長度校驗會出現問題 思路 通過全域性異常處理器 來攔截引數校驗的異常 進行統一的引數校驗處理 步驟 匯入jar包 <dependency> <groupId>org.springframework.b
在springboot中使用統一引數校驗
開發web專案有時候我們需要對controller層傳過來的引數進行一些基本的校驗,比如非空,非null,整數值的範圍,字串的個數,日期,郵箱等等。最常見的就是我們直接寫程式碼校驗,這樣以後比較繁瑣,而且不夠靈活。 Bean Validation 1.0(JSR
Springboot @Valid 用AOP統一引數校驗以及日誌輸出
程式碼如下 package com.st.user.config; import com.alibaba.fastjson.JSONObject; import com.st.common.base.exception.helper.CompanyEnum; impor
SpringBoot使用JSR303做引數校驗
1. 實體 public class User { @NotNull private Integer id; @NotNull private String na
SpringBoot引數校驗機制之一:基本驗證概念
引言 在實際專案開發中,我們會對Controller層接收到的引數進行基本的校驗,本文主要介紹SpringBoot專案中使用註解對輸入引數進行初步規則校驗的方法。本文將從以下幾個方面進行闡述。 Rest請求方式 校驗框架 常用的引數校驗註解 程式碼示例
SpringBoot中BeanValidation資料校驗與優雅處理詳解
[toc] ## 本篇要點 > JDK1.8、SpringBoot2.3.4release - 說明後端引數校驗的必要性。 - 介紹**如何使用validator進行引數校驗**。 - 介紹@Valid和@Validated的區別。 - 介紹**如何自定義約束註解**。 - 關於Bean Validat
springboot使用hibernate validator校驗
配置 瀏覽器 .project else 12px 使用 很多 大於等於 ber 一、參數校驗 在開發中經常需要寫一些字段校驗的代碼,比如字段非空,字段長度限制,郵箱格式驗證等等,寫這些與業務邏輯關系不大的代碼個人感覺有兩個麻煩: 驗證代碼繁瑣,重復勞動 方法內
springboot自定義註解校驗時出現的異常
異常資訊: javax.validation.ConstraintDefinitionException: HV000074 原因: 在約束註釋中它是關於groups()和payload()缺失的,只需新增這兩行就可以了: Class<?>[] groups() de
Vue 元件引數校驗與非 props 特性
元件的引數校驗:父元件通過屬性傳遞給子元件資料,子元件有權對這些資料進行約束,這就是引數校驗。 如下,簡單的引數校驗。 <div id="root"> <child content="hello world"></child> <!-- 下
日誌資訊新增和引數校驗
1:在類中要新增日誌資訊: private static final Logger log = LogManager.getLogger(ShopCartAction.class); log.info();//普通訊息 log.error();//錯誤資訊列印 log.debug()
Shell指令碼對Linux進行檔案校驗
一、需求 有客戶等保需求對檔案一致性進行校驗,想到利用md5sum工具,因此寫指令碼來對檔案進行自定義掃描,後期可以利用其進行校驗,快速校驗檔案發現變更的檔案,一定程度及時發現等行為。 二、指令碼 利用md5sum將掃描得到的檔案儲存在/tmp目錄下,字尾為時間戳,後期可以利用此檔案進行校驗 #!/b
WPF使用IDataErrorInfo進行資料校驗
原文: WPF使用IDataErrorInfo進行資料校驗 這篇部落格將介紹如何使用IDataErrorInfo進行資料校驗。下面直接看例子。一個Customer類,兩個屬性(FirstName, Age) class Customer { public string FirstName