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、测试结果

数据有误:

 数据没问题:

 

posted @ 2019-12-16 16:39  Arbitrary233  阅读(1061)  评论(0编辑  收藏  举报