清单 3:
@Target({})//约束注解应用的目标元素类型
@Retention()//约束注解应用的时机
@Constraint(validatedBy={})//与约束注解关联的验证器
public@inteceConstraintName{

Stringmessage()default"";//约束注解验证时的输出消息
Class<?>[]groups()default{};//约束注解在验证时所属的组别
Class<?extendsPayload>[]payload()default{};//约束注解的有效负载
}
约束注解应用的目标元素类型包括 METHOD, FIELD, TYPE, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER。METHOD 约束相关的 getter 方法;FIELD 约束相关的属性;TYPE 约束具体的 Java Bean;ANNOTATION_TYPE 用在组合约束中;该规范同样也支持对参数(PARAMETER)和构造器(CONSTRUCTOR)的约束。
验证时的组别属性将在本文第三大部分中组与组序列中详细介绍。
有效负载通常用来将一些元数据信息与该约束注解相关联,常用的一种情况是用负载表示验证结果的严重程度。
清单 4 给出一个验证字符串非空的约束注解的定义:
清单4:
@Target({METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy={NotEmptyValidator.class})
public@inteceNotEmpty{
Stringmessage()default"thisstringmaybeempty";
Class<?>[]groups()default{};
Class<?extendsPayload>[]payload()default{};
}
约束注解定义完成后,需要同时实现与该约束注解关联的验证器。bean validation 实现约束验证器的实现需要扩展 JSR303 规范提供的接口 javax.validation.ConstraintValidator。清单 5 给出该接口。
清单 5:
publicinteceConstraintValidator<AextendsAnnotation,T>{
voidinitialize(AconstraintAnnotation);
booleanisValid(Tvalue,ConstraintValidatorContextcontext);
}
该接口有两个方法,方法 initialize 对验证器进行实例化,它必须在验证器的实例在使用之前被调用,并保证正确初始化验证器,它的参数是约束注解;方法 isValid 是进行约束验证的主体方法,其中 value 参数代表需要验证的实例,context 参数代表约束执行的上下文环境。
对于清单 4 定义的约束注解,清单 6 给出了与该注解对应的验证器的实现。
清单 6:
publicclassNotEmptyValidatorimplementsConstraintValidator<NotEmpty,String>{
publicvoidinitialize(NotEmptyparameters){
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-47803-2.html
假货
中国的电器5年内维修率超过50%
打脸中国吗