前几篇文章讲的校验都是针对简单属性,那么,如果一个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属性设置为空,此时,不会进行级联校验(既然都是空了,还怎么校验)。