标签:
对象图--个人觉得就是关联验证
ean Validation API不仅能够用来校验单个的实例对象,还能够用来校验完整的对象图.要使用这
个功能,只需要在一个有关联关系的字段或者属性上标注 @Valid . 这样,如果一个对象被校验,那么
它的所有的标注了 @Valid 的关联对象都会被校验.
例:
Person类
package com.mycompany; import javax.validation.constraints.NotNull; public class Person { @NotNull private String name; public Person(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Car类(有一个属性是Person类
package com.mycompany; import javax.validation.Valid; import javax.validation.constraints.NotNull; public class Car { @NotNull @Valid private Person driver; public Car(Person driver) { this.driver = driver; } //getters and setters ... }
如果校验 Car 的实例对象的话,因为它的driver属性标注了 @Valid , 那么关联的 Person 也会被校验.
所以,如果对象 Person 的name属性如果是 null 的话,那么校验会失败.
关联校验也适用于集合类型的字段, 也就是说,任何下列的类型:
•数组
•实现了 java.lang.Iterable 接口( 例如 Collection , List 和 Set )
•实现了 java.util.Map 接口
如果标注了 @Valid , 那么当主对象被校验的时候,这些集合对象中的元素都会被校验.
下面可以用Car with a list of passengers的例子
package com.mycompany; import java.util.ArrayList; import java.util.List; import javax.validation.Valid; import javax.validation.constraints.NotNull; public class Car { @NotNull @Valid private List<Person> passengers = new ArrayList<Person>(); public Car(List<Person> passengers) { this.passengers = passengers; } //getters and setters ... }
当校验一个 Car 的实例的时候,如果passengers list中包含的任何一个 Person 对象没有名字的话(因为对应的Person类中对其属性进行了验证),都
会导致校验失败(a ConstraintValidation will be created).
注意:对象图校验的时候是会被忽略 null 值的(对于这句话,英文上的文献为null values are getting ignored when validating object graphs这句话要表达的意思个人没明白但是在上面car类中有一个Person的例子中,不管是对应的person实例为Null还是person实例中的name为null都是验证有误的)
标签:
原文地址:http://www.cnblogs.com/wangyang108/p/5665145.html