概述 在開發RESTFull API 和普通的表單提交都需要對用戶提交的數據進行校驗,例如:用戶姓名不能為空,年齡必須大於0 等等。這裡我們主要說的是後臺的校驗,在 SpringBoot 中我們可以通過使用 Hibernate Validator 來進行後臺的數據校驗的。 閑話少說!接下來就開始介紹 ...
概述
在開發RESTFull API 和普通的表單提交都需要對用戶提交的數據進行校驗,例如:用戶姓名不能為空,年齡必須大於0 等等。這裡我們主要說的是後臺的校驗,在 SpringBoot 中我們可以通過使用 Hibernate Validator 來進行後臺的數據校驗的。
閑話少說!接下來就開始介紹如何使用 Hibernate Validator 來進行數據的校驗。
Hibernate Validator 實戰操作
我們在添加用戶的功能基礎上來進行改造。
用戶Model類代碼如下:
public class User {
private String name;
private Integer age;
//省略get and set 方法
}
用戶Controller代碼如下:
java @RequestMapping(value = "",method = RequestMethod.POST) public void add(User user){ log.info("添加用戶成功:"+"name:{},age:{}",user.getName(),user.getAge()); }
第一步我們先在 User 類上添加校驗的註解,具體代碼如下:
public class User {
@NotEmpty(message="請輸入您的名稱!")
private String name;
@Max(value = 100, message = "年齡必須在20-100之間!")
@Min(value= 20 ,message= "年齡必須在20-100之間!" )
private Integer age;
..省略get 和set 方法
}
我們來大致說明一下 註解的含義:
- 註解中message : 如果欄位信息和檢驗規則不符合提示的錯誤信息。
- 註解中的value: 表示欄位信息限定的值。
- @NotEmpty : 表示name 變數不能為空。
- @Max: 表示年齡的最大值是多少。
- @Min: 表示年齡的最小值是多少。
第二步就是對用戶添加方法進行改造
用戶添加方法中的 User 參數需要聲明 @Valid 註解,添加該註解主要是指定要校驗的參數實例,然後在添加用戶方法中添加 BindingResult 參數。
BindingResult:主要是存儲校驗結果的數據,我們可以通過 BindingResult 來判斷校驗是否通過和獲取校驗錯誤提示信息。
具體代碼如下:
java @PostMapping() public User add(@Valid User user,BindingResult bindingResult){ if(bindingResult.hasErrors()) { String defaultMessage = bindingResult.getFieldError().getDefaultMessage(); System.out.println(defaultMessage); return null; } log.info("springboot添加用戶成功:"+"name:{},age:{}",user.getName(),user.getAge()); return user; }
測試:
這裡測試使用的是谷歌的一個插件工具:Advanced REST client 來完成的,你也可以選擇你順手的工具進行測試。
測試用戶名稱為空的情況:
後臺日誌輸出如下:
測試年齡不在20到100 的數據 :
後臺日誌輸出如下:
Hibernate Validator詳細介紹
Hibernate Validator 是 實現JSR349的校驗框架,他預設提供已經定義好的校驗註解,我們經常使用的大致如下:
- @NotNull: 校驗欄位是否為空
- @NotEmpty: 校驗數組集合map是否為空並且元素大於0
- @Max(value=): 限定指端的最大值
- @Min(value=): 限定欄位的最小值
- @Size(min=, max=): 校驗集合map元素數量的範圍
- @Range(min=, max=): 校驗數組String或者數據區間範圍
- @Email: 校驗欄位是否是郵箱
- @Past: 校驗是否是一個過期的日期
- @NotBlank: 校驗字元串是否非空 即 !=null&& equals("")
- @Valid: 聲明要校驗數據的類參數