Spring框架使用到的JSR303数据校验

1. 前端的页面中的数据提交之前可以使用Jquery进行校验,数据提交到后台还需要进行校验,这样可以保证插入到数据库中的数据是合法的

JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了

@NotNull                 注解元素必须是非空

 @Null                      注解元素必须是空

 @Digits                    验证数字构成是否合法

 @Future                   验证是否在当前系统时间之后

 @Past                       验证是否在当前系统时间之前

 @Max                      验证值是否小于等于最大指定整数值

 @Min                       验证值是否大于等于最小指定整数值

 @Pattern                  验证字符串是否匹配指定的正则表达式

 @Size                      验证元素大小是否在指定范围内

 @DecimalMax         验证值是否小于等于最大指定小数值

 @DecimalMin          验证值是否大于等于最小指定小数值

 @AssertTrue           被注释的元素必须为true

 @AssertFalse          被注释的元素必须为false

Hibernate validator 在JSR303的基础上对校验注解进行了扩展,扩展注解如下:

 @Email                    被注释的元素必须是电子邮箱地址

 @Length                  被注释的字符串的大小必须在指定的范围内

 @NotEmpty             被注释的字符串的必须非空

 @Range                   被注释的元素必须在合适的范围内

3. 具体的使用:

(1)使用JSR303数据校验需要假如使用的是一般的web项目,那么需要到网上下载相关的jar包然后拷贝到WEB-INF下的lib目录,需要的jar包如下:

①hibernate-validator-4.3.0.Final.jar

下载的网址:http://www.java2s.com/Code/Jar/h/Downloadhibernatevalidator430finaljar.htm

②validation-api-1.0.0.GA.jar

下载的网址:http://www.java2s.com/Code/Jar/v/Downloadvalidationapi100gajar.htm

③jboss-logging.jar

下载的网址:http://www.cncrk.com/downinfo/206385.html(下载这个jar包大部分要使用csdn积分下载,所以找了这个网站不用积分下载)

(2)在spring的配置文件需要配置的内容有:

 <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- hibernate校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
</bean>
    <mvc:annotation-driven validator="validator" />  

(3)在Java的普通类JavaBean使用@注解来进行数据校验

   @Pattern(regexp="^20[0-1]{1}[0-9]{7}$", message = "学号只能以20开头的十位数字")
    public String stuId;    
    
    @Pattern(regexp="(^[a-zA-Z0-9]{2,5}$)|(^[\u2E80-\u9FFF]{2,5}$)", message = "用户名可以是2-5位中文或者2-5位英文与数字的组合")
    public String name;
    
    @Pattern(regexp="(^[1-9]{2})$|(^[1-9]{1}$)", message = "年龄可以是1位至2位的数字")
    public String age;

直接在属性的上面规定校验的正则表达式

(4)控制器接收jsp页面传来的表单序列化之后的数据之后使用JavaBean来接收数据,并且在需要校验的对象前面加上@Valid注解,使用@BindResult注解来接收数据校验错误的信息,校验的时候假如校验的数据有错可以输出其中错误的字段像下面的例子:

@ResponseBody
    @RequestMapping(value = "/insertStudent", method = RequestMethod.POST)
    public Object insertStudent(@Valid Student student, BindingResult res){
        AjaxResult result = new AjaxResult();
        Map<String, Object> map = new HashMap<String, Object>();
        if(res.hasErrors()){
            List<FieldError> fieldErrors = res.getFieldErrors();
            for(FieldError fieldError:fieldErrors){
                System.out.println("错误的字段名: " + fieldError.getField());
                System.out.println("错误的信息: " + fieldError.getDefaultMessage());
                map.put(fieldError.getField(), fieldError.getDefaultMessage());
            }
            result.setRes(false);
            result.add("errorFields", map);
            return result;
        }else{
            studentService.insertStudent(student);
            result.setRes(false);
            return result;
        }
    }    

 

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/86537442
0条评论
添加一条新回复