JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。
此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。
Spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
JSR 303内置的约束规则:
@AssertTrue / @AssertFalse
[list]
[*]验证适用字段:boolean
[*]注解说明:验证值是否为true / false
[*]属性说明:-
[/list]
@DecimalMax / @DecimalMin
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题
[*]属性说明:公共
[/list]
@Digits
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值的数字构成是否合法
[*]属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。
[/list]
@Future / @Past
[list]
[*]验证适用字段:Date,Calendar
[*]注解说明:验证值是否在当前时间之后 / 之前
[*]属性说明:公共
[/list]
@Max / @Min
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值是否小于或者等于指定的整数值
[*]属性说明:公共
[/list]
@NotNull / @Null
[list]
[*]验证适用字段:引用数据类型
[*]注解说明:验证值是否为非空 / 空
[*]属性说明:公共
[/list]
@Pattern
[list]
[*]验证适用字段:String
[*]注解说明:验证值是否配备正则表达式
[*]属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。
[/list]
@Size
[list]
[*]验证适用字段:String,Collection,Map,数组
[*]注解说明:验证值是否满足长度要求
[*]属性说明:max:指定最大长度,min:指定最小长度。
[/list]
@Valid
[list]
[*]验证适用字段:引用类型
[*]注解说明:验证值是否需要递归验证
[*]属性说明:无
[/list]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
刚开始学着用JSR-303做验证就出现麻烦了。 昨天晚上调试了好久。
使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
@Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
数据绑定错误直接抛异常,不会封装成一个BindingResult对象。
此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。
Spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
JSR 303内置的约束规则:
@AssertTrue / @AssertFalse
[list]
[*]验证适用字段:boolean
[*]注解说明:验证值是否为true / false
[*]属性说明:-
[/list]
@DecimalMax / @DecimalMin
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题
[*]属性说明:公共
[/list]
@Digits
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值的数字构成是否合法
[*]属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。
[/list]
@Future / @Past
[list]
[*]验证适用字段:Date,Calendar
[*]注解说明:验证值是否在当前时间之后 / 之前
[*]属性说明:公共
[/list]
@Max / @Min
[list]
[*]验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
[*]注解说明:验证值是否小于或者等于指定的整数值
[*]属性说明:公共
[/list]
@NotNull / @Null
[list]
[*]验证适用字段:引用数据类型
[*]注解说明:验证值是否为非空 / 空
[*]属性说明:公共
[/list]
@Pattern
[list]
[*]验证适用字段:String
[*]注解说明:验证值是否配备正则表达式
[*]属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。
[/list]
@Size
[list]
[*]验证适用字段:String,Collection,Map,数组
[*]注解说明:验证值是否满足长度要求
[*]属性说明:max:指定最大长度,min:指定最小长度。
[/list]
@Valid
[list]
[*]验证适用字段:引用类型
[*]注解说明:验证值是否需要递归验证
[*]属性说明:无
[/list]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
刚开始学着用JSR-303做验证就出现麻烦了。 昨天晚上调试了好久。
使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
@Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
数据绑定错误直接抛异常,不会封装成一个BindingResult对象。
@RequestMapping(value="/login", method=RequestMethod.POST)
public String login(@Valid User user, BindingResult br, Map<String, Object> model) {
if (br.hasErrors()) {
return "login";
}
return "redirect:/salary/list.do";
}