Hibernate Validator 第22篇:類級別約束

約束也可以應用在類級別上,來校驗整個對象的狀態。類級別的約束,被定義和屬性約束相同的方式,下面的例子展示@ValidPassengerCount的約束註解和校驗器,你在之前的文章中見到過的。

@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { ValidPassengerCountValidator.class })
@Documented
public @interface ValidPassengerCount {

    String message() default "{org.hibernate.validator.referenceguide.chapter06.classlevel." +
            "ValidPassengerCount.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}
package org.hibernate.validator.referenceguide.chapter06.classlevel;

public class ValidPassengerCountValidator
        implements ConstraintValidator<ValidPassengerCount, Car> {

    @Override
    public void initialize(ValidPassengerCount constraintAnnotation) {
    }

    @Override
    public boolean isValid(Car car, ConstraintValidatorContext context) {
        if ( car == null ) {
            return true;
        }
 		return car.getPassengers().size() <= car.getSeatCount();
    }
}

正如例子中證明的那樣,你需要在@Target註解中使用使用元素類型TYPE。這將使你的約束被放在type定義中。這個在例子中約束的校驗器,將會收到一個Car,在isValid()方法中,可以通過比較對象的狀態,來決定給定的對象是否是有效的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章