资源链接
Bean Validation 官网地址:
Hibernate Validator 官方文档地址:
validation api 文档地址:
码云测试代码地址:
Bean Validation简介
验证数据是在所有应用程序层中出现的常见任务,从表示到持久化层。通常,在每个层中实现相同的验证逻辑,这是耗时且容易出错的。为了避免重复这些验证,开发人员经常将验证逻辑直接绑定到域模型中,使用验证代码将域类与类本身的元数据绑定在一起。
JSR 380-Bean验证2.0-为实体和方法验证定义了元数据模型和API。默认的元数据源是注释,可以通过使用XML覆盖和扩展元数据。API不绑定到特定的应用程序层或编程模型。它不是与web或持久性层绑定的,它既可以用于服务器端应用程序编程,也可以用于富客户端Swing应用程序开发人员。
Hibernate Validator 6和Bean Validation 2.0需要Java 8或更高版本。
Bean Validation的特点:
Bean Validation 验证符合标准的Java规范
让您通过注释来表达对对象模型的约束
让您以可扩展的方式编写自定义约束
提供用于验证对象和对象图的api
提供用于验证参数和返回方法和构造函数值的api
报告一组违规(本地化)
运行在Java SE上,但是集成在Java EE 6和以后;Bean验证2.0是Java EE 8的一部分
Bean Validation的配置
我们以Maven项目为例来进行说明,Bean Validation在使用时需要添加以下依赖项:分别是javax.validation
中的validation-api
以及org.hibernate.validator
中的hibernate-validator
。
而下面的org.glassfish
中的javax.el
不属于Bean Validation,但是在一些情况下它是必须的,因为Bean Validation需要EL表达式相应的支持,当然,对于提供EL表达式的容器,该依赖就可以不用添加了。
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>
<!--统一的EL参考实现的Maven依赖关系-->
<!--对于那些无法提供EL实现的环境,Hibernate验证器提供了一个章节的相应介绍。然而,这个插值器的使用不符合Bean验证规范。-->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
</dependency>
下面是完整的pom.xml源码:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lyc</groupId>
<artifactId>validation</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>validation</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<