Hibernate Validator 6.0.7.Final 之一(宣告Bean約束之級聯約束)
阿新 • • 發佈:2018-11-24
前幾篇文章講的校驗都是針對簡單屬性,那麼,如果一個bean的屬性是一個複雜物件呢,我們該怎麼校驗,其實也簡單,只需要在這個屬性上使用@Valid註解就可以了。
- Person的定義
public class Person {
@NotNull(message = "不能沒有名字")
@NotBlank(message = "名字不能為空字串")
private String name;
public String getName() {
return name;
}
public void setName (String name) {
this.name = name;
}
}
- Car的定義
public class Car {
@NotNull
@Valid
private Person driver;
public Person getDriver() {
return driver;
}
public void setDriver(Person driver) {
this.driver = driver;
}
}
注意:我們在Car的driver屬性上使用了@Valid註解,這樣才能進行級聯校驗
- 測試
@Test
public void cascadeTest() {
Person driver = new Person();
Car car = new Car();
car.setDriver(driver);
Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car);
logger.info("違反的約束的個數:{}", constraintViolations.size ());
for (ConstraintViolation<Car> constraintViolation : constraintViolations) {
logger.info("違反的約束:{}", constraintViolation.getMessage());
}
logger.info("-----------");
car.setDriver(null);
constraintViolations = validator.validate(car);
logger.info("違反的約束的個數:{}", constraintViolations.size());
for (ConstraintViolation<Car> constraintViolation : constraintViolations) {
logger.info("違反的約束:{}", constraintViolation.getMessage());
}
}
- 檢視
需要注意的是,第一次測試中,我們的driver屬性不為空,同時使用了@Valid註解,所以進行了級聯校驗;第二次測試,我們將driver屬性設定為空,此時,不會進行級聯校驗(既然都是空了,還怎麼校驗)。