SpringMVC——JSR303的數據校驗-Hibernate Validator方式實現


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、測試結果

數據有誤:

 數據沒問題:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM