我已经创建了自定义注释。
@Constraint(validatedBy = CourseCodeConstraintValidator.class)
@Target({ElementType.FIELD , ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CourseCode {
//define default course code
public String value() default "LUV";
//define default error message
public String message() default "must start with LUV";
//define default groups
public Class<?>[] groups() default {};
//define default payloads
public Class<? extends Payload>[] payload() default {};
}
然后我有了用于自定义批注的验证器类。
public class CourseCodeConstraintValidator implements ConstraintValidator<CourseCode , String>{
private String coursePrefix;
enter code here
public void initialize(CourseCode theCourseCode) {
coursePrefix = theCourseCode.value();
}
@Override
public boolean isValid(String theCode, ConstraintValidatorContext theConstraintValidatorContext) {
// TODO Auto-generated method stub
boolean result;
if(theCode != null) {
result = theCode.startsWith(coursePrefix);
}
else {
result = true;
}
return result;
}
}
我在CourseCodeValidator类的initialize(CourseCode theCourseCode)方法中有一个疑问。 TheCourseCode如何初始化? theCourseCode应该为null,因为我还没有创建对象(theCourseCode = new CourseCode();)。我可以通过theCourseCode.value()访问value方法。这是怎么回事?