zoukankan      html  css  js  c++  java
  • Springmvc的服务端数据验证-----Hibernate Validator

    导入Hibernate validator的Jar包

      hibernate-validator-4.3.0.Final.jar

      jboss-logging-3.1.0.CR2.jar

      validation-api-1.0.0.GA.jar

    定义实体类:


    public class Student {


        private String name;
        private double score;
        private String mobile;
            
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getScore() {
            return score;
        }
        public void setScore(double score) {
            this.score = score;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        @Override
        public String toString() {
            return "Student [name=" + name + ", score=" + score + ", mobile="
                    + mobile + "]";
        }

    }

    定义index.jsp页面  

      <body>
       Index.jsp <br>
       <form action="test/some.do" method="post">
               姓名:<input name="name"  /> ${nameMsg }<br>
               成绩:<input name="score"  /> ${scoreMsg }<br>
               手机号:<input name="mobile" />${mobileMsg }<br>
               <input type="submit" value="提交请求">
       </form>
      </body>

    定义Controller

    import java.util.List;

    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.FieldError;
    import org.springframework.validation.ObjectError;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;

    @Controller
    public class MyController {

        @RequestMapping("/test/some.do")
        //@Validated 表名Student是使用了Bean验证
        //BindingResult是异常信息
        public ModelAndView doSome(@Validated Student student , BindingResult br) {
            
            ModelAndView mv = new ModelAndView();
            //默认的成功页面
            mv.setViewName("/show.jsp");

            //异常的判读处理
            List<ObjectError> errors = br.getAllErrors();
            //size() > 0 表名有异常
            if(errors.size() > 0 ){
                //获取指定属性的异常
                FieldError nameError = br.getFieldError("name");
                FieldError scoreError = br.getFieldError("score");
                FieldError mobileError = br.getFieldError("mobile");
                
                // name属性验证失败了,产生了error
                if( nameError != null){
                    mv.addObject("nameMsg", nameError.getDefaultMessage());
                }
                
                if( scoreError != null){
                    mv.addObject("scoreMsg", scoreError.getDefaultMessage());
                }
                
                if( mobileError != null){
                    mv.addObject("mobileMsg", mobileError.getDefaultMessage());
                }
                mv.setViewName("/index.jsp");
            }
            return mv;
        }
    }

    /**

    只要发生数据验证失败,则需要将页面重新跳转到index.jsp表单页面,让用户重写输入

    BindingResult 接口中常用的方法

    getAllErrors() :获取到所有的异常信息,其返回值为List ,但若没有发生异常,则该List也被创建,只不过其size()为0,而非List为Null

    getFieldError() : 获取指定属性的异常信息

    getErrorCount() : 获取所有异常的数量

    getRawFieldValue() : 获取到用户输入引发验证异常的原始值.

    */

    定义show.jsp页面

    <html>
        <head>    
        </head>  
        <body>
           show.jsp <br>
        </body>
    </html>

    定义SpringMVC配置文件

      <!-- 注册包扫描器 -->
      <context:component-scan base-package="com.zx.*" />
      <!-- 注册验证器 -->
      <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <!-- 指定使用的验证框架, 验证器的提供者 -->
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
      </bean>
     
      <!-- 把验证器给注解驱动 -->
      <mvc:annotation-driven validator="myValidator" />
     

    在实体属性上添加验证注解:

      使用的验证器注解均为:javax.validation.constraints包中的类.在注解的message属性中,可以使用{属性名}的方式来引用指定的注解的属性值

    import javax.validation.constraints.Max;
    import javax.validation.constraints.Min;
    import javax.validation.constraints.Pattern;
    import javax.validation.constraints.Size;

    import org.hibernate.validator.constraints.NotEmpty;

    public class Student {
        //验证的注解放在属性上,指定验证的规则
        @NotEmpty(message="姓名不能为空")
        @Size(min=3,max=6,message="姓名长度是{min}到{max}")
        private String name;
        @Min(value=0,message="成绩不能小于0")
        @Max(value=100,message="成绩不能大于100")
        private double score;
        @NotEmpty(message="手机号不能为空")
        @Pattern(regexp="^1[34578]\d{9}$",message="手机号格式不正确")
        private String mobile;
            
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getScore() {
            return score;
        }
        public void setScore(double score) {
            this.score = score;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        @Override
        public String toString() {
            return "Student [name=" + name + ", score=" + score + ", mobile="
                    + mobile + "]";
        }

    }

    Hibernate Validator中常用的验证注解介绍:

    1.@AssertFalse  : 验证注解的元素值时false

    2.@AssertTrue : 验证注解的元素值时true

    3.@DecimalMax(value=x) : 验证注解的元素值小于等于指定的十进制value值

    4.DecimalMin(value=x) : 验证注解的元素值大于等于指定的十进制value值

    5.@Degits(integer=整数位数,fraction=小数位数) : 验证注解的元素值的整数位树和小数位数上线

    6.@Futrue : 验证注解的元素值(日期类型) 比当前时间晚

    7.@Max(value=x) : 验证注解的元素值小于等于指定的value值

    8.@Min(value=x) 验证注解的元素值大于等于指定的value值

    9.@NotNull : 验证注解的元素值不是null

    10.@Null : 验证注解的元素值是null

    11.@Past : 验证注解的元素值(日期类型)比当前时间早

    12.@Pattern(regex=正则表达式)  : 验证注解的元素值与指定的正则表达式匹配

    13.@Size(min=最小值,max=最大值) : 验证注解的元素值在min和max(包含)指定区间,如字符长度,集合大小

    14.@Valid : 验证关联的对象 ,如账户对象里有一个订单对象,指定验证订单对象

    15.@NotEmpty : 验证注解的元素值不为null且不为空(字符长度不为0,集合大小不为0)

    16.@Renge(min=最小值,max=最大值) 验证注解的元素值在最小值和最大值之间

    17.@NotBlank : 验证注解的元素不为空(不为null,去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

    18.@Length(min=下限,max=上线) 验证注解的元素值长度在min和max区间内

    19.@Email : 验证注解的元素值时Emali,也可以通过正则表达式和flag指定自定义的email格式

    注意:

      @NotNull,  @NotEmpty 和@NotBlank的区别

        @NotNull           任何对象的value不能为null

        @NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

        @NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

  • 相关阅读:
    Keil(MDK) 5 软件安装教程
    JPA 的specification动态查询
    idea 建立JPA项目(二)
    HBase单节点的安装与配置
    【codevs3012+codevs3037】线段覆盖4+线段覆盖5(DP)
    MySQL下载和安装教程
    二、单线程的 JavaScript
    #JS 基础之异步(一)
    JS 基础之: 继承的 六 种实现方式
    源码浅析-Vue3中的13个全局Api
  • 原文地址:https://www.cnblogs.com/zwjcom/p/11365522.html
Copyright © 2011-2022 走看看