SpringMVC的数据验证和JSR 303国际化显示(十一)中

三. JSR 303 验证。


JSR 303 的验证,主要是通过 注解的方式,在Bean 的属性上面进行添加注解,进行验证,直接作用在 Java Bean 上面,又叫做 Bean Validation .


官方参考的是Hibernate Validation. 所以,重点学习 Hibernate的验证, 而不是Apache 的验证。


需要导入相应的包:


SpringMVC的数据验证和JSR 303国际化显示(十一)中


三.一 JSR 303 验证注解


JSR 303 的注解,在 validation-api-1.1.0.Final.jar 包里面。 javax.validation.constraints


注解 功能 范例
@Null 验证对象为 null @Null
private String description;
@NotNull 验证不为空,只验证基本数据,
不能验证长度为0的字符串
@NotNull
private Integer age;
@AssertTrue 验证为 true @AssertTrue
private boolean isMarriage;
@AssertFalse 验证为false @AssertFalse
private String isMarriage;
@Max(value) 整数数字类型的,最大值为value @Max(120)
private Integer age;
@Min(value) 整数数字类型的,最小值为value @Min(18)
private Integer age;
@DecimalMax(value) 浮点型,最大值,value为字符串形式 @DecimalMax(value=“100.00”)
private double score;
@DecimalMin(value) 浮点型,最小值,value为字符串形式 @DecimalMin(value=“100.00”)
private double score;
@Digits(integer,fraction) 浮点型是否符合格式,integer为整数,
fraction为小数
@Digits(integer=3,fraction=2)
private double score;
@Size(min,max) 数组,List,Map,Set,String,的最大值和最小值 @Size(min=2,max=10)
private List hobbys;
@Past 日期 Date 或者是日历 Calendar 对象
是否在当前时间 now 之前
@Past
private Date birthday;
@Future 日期 Date 或者是日历 Calendar 对象
是否在当前时间 now 之后
@Future
private Date invalid;
@Pattern 正则表达式验证,用regexp来表达式 @Pattern(regexp=“1[0~9]{10}”)
private String phone;


三.二 Hibernate 扩展的验证注解


Hibernate 除了支持 上面 的JSR 303的注解之外,还添加了一些新的注解。


在 hibernate-validator-5.2.4.Final.jar 包里面。 org.hibernate.validator.constraints


注解 功能 范例
@NotBlank 不为空,长度不能为0. 只能是字符串
会将字符串先trim()去除左右空格
@URL 合法的url @URL
private String mainUrl;
@Email 合法的Email 地址 @Email
private String email;
@CreditCardNumber 合法的信用卡号 @CreditCardNumber
private String card;
@Length(min,max) 字符串的长度在 min与max的范围之内 @Length(min=6,max=15)
private String password;
@NotEmpty 判断是否为空或者是Empty, 用于Array,Map,Collection,String @NotEmpty
private String name;
@Range(min,max,message) 数字的范围,min为最小值,max为最大值
message为提示信息
@Range(min=18,max=100,message=“年龄需要在18~100之间”)
private Integer age;


四. JSR 303 验证数据


四.一 引入jar包


SpringMVC的数据验证和JSR 303国际化显示(十一)中


四.二 在User.java 的各个属性上添加不同的约束注解


public class User implements Serializable{
    private static final long serialVersionUID = 1L;
    private Integer id;
    @NotBlank(message="用户名不能为空12341")
    @Length(max=10,message="用户名不能超过10个字")
    private String name;
    
    @NotBlank(message="密码不能为空")
    @Length(min=6,max=15,message="密码长度应在6~15之间")
    private String password;
    
    @Range(min=18,max=100,message="年龄需要在18~100之间")
    private Integer age;

    @NotBlank(message="描述不能为空")
    private String description;
    
    @DecimalMin(value="0.00",message="成绩的最小值为0")
    @DecimalMax(value="100.00",message="成绩的最大值不能超过100")
    @NumberFormat(pattern="###,##")
    private double score;


    //定义一个日期类
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @Past(message="填写的出生日期必须要在当前日期之前")
    private Date birthday;
    
    @Pattern(regexp="1[3456789]\\d{9}",message="请输入正确的电话号码")
    private String phone;
    
    @Email
    private String email;
    
 // 后面,就是setter和getter方法了。
   
}


四.三 springmvc.xml 的配置文件,将hibernate进行配置


<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
    
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- hibernate校验器 -->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
    </bean>


四.四 后端,Action 进行处理


@Controller
@RequestMapping(value="/user")
public class UserAction {
    
    //转到登录的页面
    @RequestMapping(value="toLogin")
    public String toLogin(Model model){
        model.addAttribute("user",new User());
        return "user/login";
    }
    //绑定到user对象。
    @RequestMapping(value="login") 
    public String login(@Validated User user,
            BindingResult bindingResult,Model model){
        model.addAttribute("user",user);
        if(bindingResult.hasErrors()){ //有错的话,就返回登录页面。
            return "user/login";
        }
        return "user/list";
    }
}


四.五 前端显示代码


<body>
    <h2>两个蝴蝶飞,数据验证使用</h2>
    <form:form commandName="user" action="login.action"  method="post">
        <form:label path="name">姓名:</form:label>
        <form:input path="name"/>
        <form:errors path="name"></form:errors> <br/>
        
        <form:label path="password">密码:</form:label>
        <form:input path="password"/> <!--为了能看见值,这里用 form:input,而不是form:password -->
        <form:errors path="password"></form:errors> <br/>
        <form:label path="age">年龄:</form:label>
        <form:input path="age"/>
        <form:errors path="age"></form:errors> <br/>
        
        <form:label path="description">描述:</form:label>
        <form:input path="description"/>
        <form:errors path="description"></form:errors> <br/>
        
        <form:label path="score">成绩:</form:label>
        <form:input path="score"/>
        <form:errors path="score"></form:errors> <br/>
        
        <form:label path="birthday">出生日期:</form:label>
        <form:input path="birthday"/>
        <form:errors path="birthday"></form:errors> <br/>
        
        <form:label path="phone">联系方式:</form:label>
        <form:input path="phone"/>
        <form:errors path="phone"></form:errors> <br/>
        
        <form:label path="email">邮箱:</form:label>
        <form:input path="email"/>
        <form:errors path="email"></form:errors> <br/>
              
        
        <form:button>提交</form:button>
    </form:form>
</body>


四.六 重启服务器,进行验证


情况组合太多,老蝴蝶在这里只简单列举几个。


SpringMVC的数据验证和JSR 303国际化显示(十一)中


SpringMVC的数据验证和JSR 303国际化显示(十一)中


SpringMVC的数据验证和JSR 303国际化显示(十一)中


JSR 303验证是正确的,可以进行验证。

上一篇:Python学习笔记——控制语句


下一篇:SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易