编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制html
[java] view plain copyjava
能够将edit.username.null与edit.password.size看为参数,在message中传递,具体请看第二步。git
首先介绍关于验证注解的类型种类正则表达式
@Null | 限制只能为null |
@NotNull | 限制必须不为null |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个未来的日期 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Past | 验证注解的元素值(日期类型)比当前时间早 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
@NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不一样于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
验证注解的元素值是Email,也能够经过正则表达式和flag指定自定义的email格式 |
使用 这些注解很简单,只须要在实体类中的变量属性前面加上该注解便可。数据库
[html] view plain copyapp
其中{}至关于占位符,将min、max参数传图,同时也将消息文件中定制的错误信息传入,固然也能够直接不使用国际化文件,可是推荐使用,方便统一与修改。spa
[html] view plain copy.net
Controller层的使用,很简单。须要在相应的方法传入的Bean参数前面增长注解@Validated,还有增长BindingResult参数便可,具体请看代码示例:htm
[html] view plain copyblog
这里就不作介绍了,实际项目中会封装好相应的javcscript等方法,只须要调用就能够返回页面提示给用户错误信息。
先在记录以前,介绍一下这样的场景:在对用户的账号密码进行编辑保存以及新增是两种不同的状况。
编辑修改->保存:只须要验证username与password是否符合条件便可,不须要验证id(由于在数据库中id已经存在)。
新增->保存:新增须要验证username与password是否符合条件,还要验证id。
这时候就用到groups分组分状况对Bean属性变量进行验证,也能够知足多验证。具体的须要一下两个步骤
分组接口类只是普通的接口类并无多大意义,只是用来标识这个属性哪一种状况下被验证,这相似于java.io.Serializable
[html] view plain copy
在对新增的用户进行ID验证,增长@Validated({addUser.class})接口类用来表示新增的User.getId()须要验证。
[html] view plain copy
在User实体类中添加groups分组@NotEmpty(groups={addUser.class})与UserController中@Validated({addUser.class})对应,说明在执行saveAddUser新增用户的状况下,才对新增的用户id进行验证。
[html] view plain copy
以上三步就能够简单地完成分组验证,可是对分组验证补充一下三点:
第一是:不分配groups分组时,默认每次都须要验证。
第二是:经过groups分组能够对同一个变量进行多个验证,以下代码
[html] view plain copy
第三是:默认的状况下,不一样的分组约束验证是无序的,可是在有些状况下验证的相互约束很重要(好比前一个组验证失败,后面的将再也不验证等状况),因此groups分组的验证也有先后验证顺序。使用@GroupSequence注解进行排序。
[html] view plain copy