hibernate_validator_04
对象图--个人觉得就是关联验证
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的更多相关文章
随机推荐
- yum命令常见方法
yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...
- Subsets II ——LeetCode
Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...
- Vagrant 集群的部署
使用Vagrant部署集群 一.运行多个虚拟机 我们通过配置Vagrantfile配置两个虚拟机--web服务器和数据库服务器. Vagrant::configure("2") d ...
- [AS/400] 基本概念
本文内容源于 Go4AS400 在 AS/400 中,AS 代表着 Application System.AS/400 是一个安全性高的系统,可以限制用户只能访问.处理特定的信息.AS/400 整合了 ...
- 《A First Course in Probability》-chaper3-条件概率和独立性-贝叶斯公式、全概率公式
设有事件A.B. 下面结合具体的题目进一步理解这种方法: Q1:保险公司认为人可以分为两类,一类易出事故,另一类则不易出事故.统计表明,一个易出事故者在一年内发生事故的概率是0.4,而对不易出事故者来 ...
- selenium grid 测试资料
像风一样自由的4篇博客: http://blog.csdn.net/five3/article/details/9671287 http://blog.csdn.net/five3/article/d ...
- Intellij调试debug
先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...
- 布隆过滤器的java实现
package com.kaikeba.data.jobspider.util; import java.util.BitSet; public class Bloomfilter { private ...
- Struts2中OGNL
什么是OGNL OGNL:Object Graph Navigation Language 对象导航图语言 开源项目,取代页面中Java脚本,简化数据访问 和EL同属于表达式语言,但功能更为强大 让 ...
- jni java和C之间的值传递(int String int[])
我们通过jni调用C代码不可能每次只是去调一个方法,通常,我们需要传递一些值过去. 例如,播放电影,那就肯定需要你把电影的 url给 C的播放器吧,等等. 接下来就看一看怎么去传递这些值: 首先是最简 ...