javaBean vlidation(2)—内置约束
本文介绍规范内置的约束,并说明可选属性元素。
预定约束说明
javaBean验证规范内置了下面约束注解:
AssertFalse,AssertTrue
元素属性:无
目标变量类型:boolean, java.lang.Boolean
期望目标变量值:false,trueDecimalMin,DecimalMax
元素属性:(value=int, inclusive=boolean)
目标变量类型:BigDecimal, BigInteger, CharSequence, primitive numbers (byte, short, int, long) and their respective wrappers
期望目标变量值:variableValue >= value,variableValue <= value ; 注:如果inclusive=false,则不包括等号,缺省为ture.
Digits
元素属性:(integer=int, fraction=int)
目标变量类型:同上
期望目标变量值:variableIntegralDigits <= integer 并且 variableFractionalDigits <= fraction
Min,Max
元素属性: (value=int)
目标变量类型:同上,除了CharSequence
期望目标变量值:variableValue >= value,variableValue <= value
Size
元素属性: (max=int, min=int)
目标变量类型:CharSequence, Collection, Map, Array
期望目标变量值:variableValueRelatedSize >= min 并且 variableValueRelatedSize <= max
Pattern
元素属性:(regexp=String, flags=Pattern.Flag[])
目标变量类型: CharSequence (String)
期望目标变量值:Pattern.matches(regexp, variableValue) == true
Past,Future
元素属性:无
目标变量类型: java.util.Date, java.util.Calendar
期望目标变量值:currentMillis of variableValue < time now in millis,currentMillis of variableValue > time now in millis
Null,NotNull
元素属性:无
目标变量类型:Any subclass of java.lang.Object
期望目标变量值:variableValue == null,variableValue != null
上面约束定义在javax.validation.constraints
包中。
可选属性说明
上面约束中标注为“无”属性,还有一些可选属性,下面给予详细说明:
message = String
验证错误信息,缺省通过key读取资源文件,实现国际化。也可以直接使用硬代码覆盖缺省信息,或自定义资源文件,通过KEY覆盖。
资源key需用在{}中。缺省的key是注解类的完整名称加上.message,如:javax.validation.constraints.Future.message
。当我们自定义约束注解时,应该遵循相同的约定。groups = Class
约束列表
上面每个预定义的注解,有一个内置注解List
.我们看看NotNull
的代码:
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@interface List {
NotNull[] value();
}
}
这个注解允许指定多个相同的注解,如不同组及错误信息。
总结
本文简要说明预定义约束注解,以及可选项的属性介绍,为后面我们自定义约束做写概念说明。