1、什么是JSR303?
JSR303是java為bean數據合法性校驗所提供的一個標准規范,叫做Bean Validation.
Bean Validation是一個運行時的數據校驗框架,在驗證之后驗證的錯誤信息會被馬上返回。
2、JSR303定義了一套可以標注在成員變量、屬性方法上的校驗注解。
@Null 驗證對象是否為空 @NotNull 驗證對象是否不為空 @AssertTrue 驗證Boolean對象是否為true @AssertFalse 驗證Boolean對象是否為false @Min 驗證 Number 和 String 對象是否大等於指定的值 @Max 驗證 Number 和 String 對象是否小等於指定的值 @DecimalMax 被標注的值必須不大於約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符 串表示.小數存在精度 @DecimalMin 被標注的值必須不小於約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符 串表示.小數存在精度 @Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。 @Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內 @Past 驗證 Date 和 Calendar 對象是否在當前時間之前 @Future 驗證 Date 和 Calendar 對象是否在當前時間之后 @Pattern 驗證 String 對象是否符合正則表達式的規則
3、Hibernate Validator是JSR303的一個參考實現,除了支持所有標准的校驗注解之外,它還拓展了如下注解:
@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大於0,只對字符串,且會去掉前后空格 @URL 驗證是否是合法的url @Email 驗證是否是合法的郵件地址 @CreditCardNumber 驗證是否是合法的信用卡好嗎 @Length(min=, max=) 驗證字符串的長度必須在指定的范圍內 @NotEmpty 檢查約束元素是否為NULL或者是EMPTY.用於array、collection、map、string @Range(min,max,message) 驗證屬性值必須在合適的范圍內
4、JSR303的測試
1.導入Hibernate Validator依賴
由於springMVC配置文件中的<mvc:annotation-driven/>會默認轉配好一個LocalValidatorFactoryBean,因此不需要增加其他配置
<!--hibernate-validator--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.7.Final</version> </dependency>
2、編寫一個用戶注冊的實體類
@NotBlank(message="登錄名不能為空") private String username; @NotBlank(message="密碼不能為空") @Length(min=6,max=18,message="密碼長度必須在6~18位之間") private String password; @Email(message="郵箱格式不正確") private String email; @Pattern(regexp="[1][3|4|5|7|8][0-9]{9}",message="手機號碼格式不正確") private String phone//省略get、set方法
3、編寫一個controller
在要校驗參數前加上@Valid
//pageName為要訪問的頁面名,根據參數進行跳轉頁面 @RequestMapping(value="/{pageName}") public String page(@PathVariable String pageName,Model model){ User user = new User(); //加放入一個user是因為跳轉到registerForm.jsp頁面的時候需要和modelAttribute="user"對應,沒有user的話頁面會報錯 model.addAttribute("user",user); return pagename; } //數據校驗使用@valid,后面緊跟着errors對象保存校驗信息 @RequestMapping(value="/register") public String regist(@Valid @ModelAttribute("user") User user,Errors errors,Model model){ if(errors.hasErrors()){ //有數據錯誤則回顯 return "registerForm"; } model.addAttribute("user",user); return "success"; }
4、編寫注冊頁面(registerForm.jsp)
<form:form modelAttribute="user" action="register" method="post"> 用戶名:<form:input path="username"/>
<span><form:errors path="username" cssStyle="color:red"/></span><br> 密碼:<form:input path="password"/>
<span><form:errors path="password" cssStyle="color:red"/></span><br> 郵箱:<form:input path="email"/><span>
<form:errors path="email" cssStyle="color:red"/></span><br> 手機號:<form:input path="phone"/><span>
<form:errors path="phone" cssStyle="color:red"/></span><br> <input type="submit" value="注冊"> </form:form>
5、注冊成功頁面(success.jsp)
用戶名:${user.username }<br>
密碼:${user.password }<br>
郵箱:${user.email }<br>
手機號:${user.phone }<br>
6、測試結果
數據有誤:

數據沒問題:

