对象图--个人觉得就是关联验证

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都是验证有误的)

hibernate_validator_04的更多相关文章

随机推荐

  1. Unity 弹出界面时屏蔽对3D场景的点击

    注:这里的UI制作用的是NGUI插件 如题,在游戏中经常会遇到这种情况,场景中点击相关物体或者按钮弹出对应的2D界面,这时候除了2D界面上的可点击按钮等,应该屏蔽掉对3D场景的点击或者拖动事件. 在这 ...

  2. 数据结构(动态树):UOJ 207 共价大爷游长沙

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHwAAAJZCAIAAABUW7XHAAAgAElEQVR4nOy93cstx5Xm2f9TXh2EOe

  3. 综合查询员工和datetime.now和datetime.today区别

    一:综合查询图 二:EmployeeListWindow.cs代码 using System; using System.Collections.Generic; using System.Compo ...

  4. 调用系统api修改系统时间

    一:截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  5. Minimum Size Subarray Sum —— LeetCode

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  6. vijos P1243 生产产品(单调队列+DP)

      P1243生产产品   描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...

  7. [Locked] Longest Substring with At Most Two Distinct Characters

    Longest Substring with At Most Two Distinct Characters Given a string, find the length of the longes ...

  8. python 解析xml 文件: Element Tree 方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  9. LINUX curl GET 掉参数解决办法

    LINUX curl GET 掉参数解决方法 url 为 http://mywebsite.com/index.php?a=1&b=2&c=3web形式下访问url地址,使用 $_GE ...

  10. web.xml基本配置描述

    先加载一段写好的web.xml: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2. ...