SpringBoot - 第十九章 | 資料驗證(一)
在開發時,對於請求參數,一般上都需要進行參數合法性校驗的,原先的寫法時一個個字段一個個去判斷,這種方式太不通用了,所以 java 的 JSR 303:Bean Validation 規範就是解決這個問題。
JSR 303 只是個規範,並沒有具體的實現,目前通常都是由 hibernate-validator 進行統一參數校驗。
簡單介紹
- JSR303定義的校驗類型
Constraint(約束) | 說明 |
---|---|
@Null | 被註解的元素必須為 null |
@NotNull | 被註解的元素必須不為 null |
@AssertTrue | 被註解的元素必須為 true |
@AssertFalse | 被註解的元素必須為 false |
@Min(value) | 被註解的元素必須是一個數字,其值必須大於等於指定的最小值 |
@Max(value) | 被註解的元素必須是一個數字,其值必須小於等於指定的最大值 |
@DecimalMin(value) | 被註解的元素必須是一個數字,其值必須大於等於指定的最小值 |
@DecimalMax(value) | 被註解的元素必須是一個數字,其值必須小於等於指定的最大值 |
@Size(max, min) | 被註解的元素的大小必須在指定的範圍內 |
@Digits (integer, fraction) | 被註解的元素必須是一個數字,其值必須在可接受的範圍內 |
@Past | 被註解的元素必須是一個過去的日期 |
@Future | 被註解的元素必須是一個將來的日期 |
@Pattern(value) | 被註解的元素必須符合指定的正則表達式 |
- Hibernate Validator 附加的 constraint
Constraint(約束) | 說明 |
---|---|
被註解的元素必須是電子郵箱地址 | |
@Length | 被註解的字符串的大小必須在指定的範圍內 |
@NotEmpty | 被註解的字符串的必須非空 |
@Range | 被註解的元素必須在合適的範圍內 |
spring-boot-starter-web 包裡面有 hibernate-validator 包,所以如果開發 web 就不需要重複添加 spring-boot-starter-validation 依賴了。但如果沒用 web 依賴時候想要實現 Bean 驗證,則只要單單加入 spring-boot-starter-validation 依賴即可。
簡單範例
建立 Customer
建立 DemoController
測試(未帶參數)
啟動應用,http://localhost:8080/demo
瀏覽器訪問
Postman訪問
Postman完整的Response
1 | { |
測試(正確參數)
啟動應用,http://localhost:8080/demo?age=10&name=J.J.Huang&createBy=J.J.
瀏覽器訪問
Postman訪問
BindingResult的使用
在驗證不通過的時候,就會向上方一樣,直接返回拋出異常,而使用 BindingResult 可以讓我們對其做一些對應處理,
例如判斷該跳轉到別的頁面、顯示不同的警示…等等。
編輯 DemoController
測試(未帶參數)
啟動應用,http://localhost:8080/demo/bindingResult
瀏覽器訪問
Postman訪問
本想簡單介紹Validator,結果發現其實滿多東西滿有趣的。而這篇文章只是使用了 @Valid 進行簡單的資料驗證,讓大家先有個感覺,後面還有 @Validated 和 自定義驗證類…等等,後面會繼續講解。
註:以上參考了
JSR 303: Bean Validation
The Bean Validation reference implementation
oKong 的 SpringBoot | 第八章:统一异常、数据校验处理文章。
spring boot validator 验证