Hibernate Validator
JSR 303 的参考实现
使用指南
4.2.0.Beta1
由 Hardy Ferentschik和Gunnar Morling
and thanks to Shaozhuang Liu
iii
序言 ............................................................................. v
1. 开始入门 ..................................................................... 1
1.1. 第一个Maven项目 ........................................................ 2
1.2. 添加约束 .............................................................. 2
1.3. 校验约束 .............................................................. 3
1.4. 更进一步 .............................................................. 5
2. Validation step by step ...................................................... 7
2.1. 定义约束 .............................................................. 7
2.1.1. 字段级(field level) 约束 ........................................ 7
2.1.2. 属性级别约束 .................................................... 8
2.1.3. 类级别约束 ...................................................... 9
2.1.4. 约束继承 ....................................................... 10
2.1.5. 对象图 ......................................................... 11
2.2. 校验约束 .............................................................. 12
2.2.1. 获取一个Validator的实例 ........................................ 13
2.2.2. Validator中的方法 .............................................. 13
2.2.3. ConstraintViolation 中的方法 ................................... 14
2.2.4. 验证失败提示信息解析 ........................................... 15
2.3. 校验组 ............................................................... 15
2.3.1. 校验组序列 ..................................................... 19
2.3.2. 对一个类重定义其默认校验组 ..................................... 20
2.4. 内置的约束条件 ........................................................ 21
3. 创建自己的约束规则 .......................................................... 27
3.1. 创建一个简单的约束条件 ................................................ 27
3.1.1. 约束标注 ....................................................... 27
3.1.2. 约束校验器 ..................................................... 29
3.1.3. 校验错误信息 ................................................... 31
3.1.4. 应用约束条件 ................................................... 32
3.2. 约束条件组合 .......................................................... 33
4. XML configuration ........................................................... 37
4.1. validation.xml ........................................................ 37
4.2. 映射约束 .............................................................. 38
5. Bootstrapping ............................................................... 43
5.1. Configuration 和 ValidatorFactory ..................................... 43
5.2. ValidationProviderResolver ............................................ 44
5.3. MessageInterpolator ................................................... 45
5.3.1. ResourceBundleLocator .......................................... 45
5.4. TraversableResolver ................................................... 46
5.5. ConstraintValidatorFactory ............................................ 47
6. Metadata API ................................................................ 49
6.1. BeanDescriptor ........................................................ 49
6.2. PropertyDescriptor .................................................... 49
6.3. ElementDescriptor ..................................................... 49
6.4. ConstraintDescriptor .................................................. 50
Hibernate Validator
iv
7. 与其他框架集成 .............................................................. 51
7.1. OSGi ................................................................. 51
7.2. 与数据库集成校验 ...................................................... 51
7.3. ORM集成 .............................................................. 51
7.3.1. 基于Hibernate事件模型的校验 .................................... 51
7.3.2. JPA ............................................................ 53
7.4. 展示层校验 ............................................................ 53
8. 编程方式应用约束条件 ........................................................ 55
9. Annotation Processor ........................................................ 57
9.1. 前提条件 .............................................................. 57
9.2. 特性 ................................................................. 57
9.3. 配置项 ............................................................... 58
9.4. 使用标注处理器 ........................................................ 58
9.4.1. 命令行编译 ..................................................... 58
9.4.2. IDE集成 ........................................................ 60
9.5. 已知问题 .............................................................. 63
10. 进一步阅读 ................................................................. 65
v
序言
数据校验是任何一个应用程序都会用到的功能,无论是显示层还是持久层. 通常,相同的校验逻辑
会分散在各个层中, 这样,不仅浪费了时间还会导致错误的发生(译注: 重复代码). 为了避免重
复, 开发人员经常会把这些校验逻辑直接写在领域模型里面, 但是这样又把领域模型代码和校验
代码混杂在了一起, 而这些校验逻辑更应该是描述领域模型的元数据.
JSR 303 - Bean Validation - 为实体验证定义了元数据模型和API. 默认的元数据模型是通过
Annotations来描述的,但是也可以使用XML来重载或者扩展. Bean Validation API 并不局限于应
用程序的某一层或者哪种编程模型, 例如,如图所示, Bean Validation 可以被用在任何一层, 或
者是像类似Swing的富客户端程序中.
Hibernate Validator is the reference implementation of this JSR. The implementation
itself as well as the Bean Validation API and TCK are all provided and distributed
under the Apache Software License 2.0 [http://www.apache.org/licenses/LICENSE-2.0].