zoukankan      html  css  js  c++  java
  • 使用jsr303实现数据校验

    除了前端的js验证,服务端也可加入数据验证,springmvc中有两种方式可以验证输入

    • 利用spring自带的验证框架
    • 利用jsr303实现

    jsr303实现数据校验

    jsr303是java为bean数据合法性校验所提供的标准框架。jsr303不需要编写验证器,它定义了一套可标注在成员变量、属性方法上的校验注解。

    springmvc支持jsr303标准的校验框架,spring的DataBinder在进行数据绑定时,可同时调用校验框架来完成数据校验工作,非常方便。

    spring本身没有提供jsr303的实现,hibernate validator实现了jsr303,所以必须在项目中加入来自hibernate validator库的jar文件,复制hibernate-validator-4.3.2.Final-dist.zip中的三个jar文件即可,spring将会自动加载并装配

    • hibernate-validator-4.3.2.Final.jar
    • jboss-logging-3.1.0.CR2.jar
    • validator-api-1.0.0.GA.jar
    package edu.cn.pojo;
    
    import org.hibernate.validator.constraints.Length;
    import org.springframework.format.annotation.DateTimeFormat;
    
    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Past;
    import java.util.Date;
    
    public class User {
    
        @NotEmpty(message = "用户编码不能为空")
        private String userCode;
    
        @NotEmpty(message = "用户名称不能为空")
        private String userName;
    
        @NotNull(message = "密码不能为null")
        @Length(min = 6, max = 10, message = "用户密码长度为6-10")
        private String userPassword;
    
        @Past(message = "必须是一个过去的时间")
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private Date birthday;
    
        //省略...
    
    }

    在上述代码中,@Length 表示被注释的字符串的大小必须在指定范围内,这是hibernate validator提供的扩展注解

    下一步就需要在controller中使用注解所声明的限制规则来进行数据的校验。由于<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在controller的处理方法的入参上标注@Valid注解即可让springmvc在完成数据绑定之后,指定数据校验的工作。代码如下

    @RequestMapping(value = "/add.html", method = RequestMethod.POST)
    public String addSave(@Valid User user, BindingResult bindingResult, HttpSession session){
        if (bindingResult.hasErrors()){
            return "user/useradd";
        }
        user.setCreatedBy(((User)session.getAttribute("userSession")).getId());
        user.setCreationDate(new Date());
        if (userService.add(user)){
            return "redirect:/user/userlist.html";
        }
        return "user/useradd";
    }

    @Valid注解在validator-api依赖下,BindResult接口在spring-context依赖下

    在上述代码中,在入参对象user前标注了@Valid注解,也就意味着将会调用校验框架,根据注解声明的校验规则实施校验,校验的结果存入后面紧跟的入参中,并且这个入参必须是BindingResult或者Error类型。在该方法体内,首先根据BindingResult来判断是否存在错误。

  • 相关阅读:
    高级数据类型--字典(dict)
    一些JS常用的方法
    怎样提高WebService的性能
    Microsoft Enterprise Library 5.0 系列(三)
    Microsoft Enterprise Library 5.0 系列(四)
    Expression Blend学习二UI布局
    Expression Blend学习四控件
    Expression Blend学习5控件
    Expression Blend学习动画基础
    WPF三维图形
  • 原文地址:https://www.cnblogs.com/yanguobin/p/11675623.html
Copyright © 2011-2022 走看看