在使用校验组的时候,我们需要调用validate()方法对于每一个校验的组,或者一个一个地指定他们。在有些情况下,你也许想定义一组约束,它包含另一组约束。你可以使用组继承实现它。
我们定义一个SuperCar和一个组RaceCarChecks,它继承自Default组。一个SuperCar必须系上安全带,才能参加比赛。
public class SuperCar extends Car {
@AssertTrue(
message = "Race car must have a safety belt",
groups = RaceCarChecks.class
)
private boolean safetyBelt;
// getters and setters ...
}
public interface RaceCarChecks extends Default {
}
在下面的例子中,我们检查是否SuperCar有座位没有安全带的车是一个无效的车。和是否它是一个无效的赛车。
// create a supercar and check that it's valid as a generic Car
SuperCar superCar = new SuperCar( "Morris", "DD-AB-123", 1 );
assertEquals( "must be greater than or equal to 2", validator.validate( superCar ).iterator().next().getMessage() );
// check that this supercar is valid as generic car and also as race car
Set<ConstraintViolation<SuperCar>> constraintViolations = validator.validate( superCar, RaceCarChecks.class );
assertThat( constraintViolations ).extracting( "message" ).containsOnly(
"Race car must have a safety belt",
"must be greater than or equal to 2"
);
第一次调用validate(),我们不指定一个组,因为一个car必须有至少一个作为,所以不存在错误。这个约束来自默认的组。
第二次调用,我们仅仅指定RaceCarChecks组,这儿有两个校验错误:
一个是关于来自Default组的丢失seat的错误;
另外一个是由于没有安全带,这个约束来自RaceCarChecks约束组。