在本教程中,我们展示了如何使用 Hibernate 验证器来验证数据。 验证从用户那里收到的输入以保持数据完整性是应用逻辑的重要组成部分。 验证被合并到 Java Web 框架中,例如 Stripes,Ninja 框架或 Play 框架。
Bean 验证
Bean 验证是 Java EE 6 平台中引入的验证模型。 约束通过以 JavaBeans 组件的字段,方法或类上的注释形式的约束来支持 Bean 验证模型。 也可以使用 XML 验证描述符。
Hibernate 验证器定义
Hibernate 验证器是 Bean 验证的参考实现。 Hibernate Validator 允许表达和验证应用约束。 默认的元数据源是注释,可以通过使用 XML 进行覆盖和扩展。 它不依赖于特定的应用层或编程模型,并且可用于服务器和客户端应用编程。
Hibernate 验证器命令行应用
在下面的示例中,我们在一个简单的命令行应用中使用了 Hibernate Validator。
pom.xml
Maven pom.xml
包含 Hibernate Validator 和 Lombok 库的依赖项。 龙目岛用于减少一些样板。
Car.java
我们有一个Car
bean,我们在其中验证数据。
Car
bean 用 lombok 的@Data
注释修饰。 它会自动创建 getter 和 setter 方法,equals()
方法,toString()
方法和hashCode()
方法。
@NotNull
注释指出name
属性可能不是null
。 @Size
注释设置属性的最小和最大大小。
@Min
约束设置price
属性的最小值。 message
元素用于创建错误消息。
ClientApp.java
在客户端应用中,我们创建五个汽车对象并对其进行验证。
将创建五个汽车对象。 四辆车的值未通过验证过程。 例如,斯柯达汽车的价格太低; 即低于最小值 1000。
验证工厂与buildDefaultValidatorFactory()
方法一起使用。 在工厂,我们使用getValidator()
方法获得了验证器。 建议缓存验证器工厂,因为创建起来很昂贵。
使用验证程序的validate()
方法验证汽车。
我们将打印错误消息以了解违反约束的情况。
运行应用时,我们会收到这些错误消息。
Hibernate 验证器 Web 应用
在第二个示例中,我们在 Web 应用中利用了 Hibernate Validator。 该应用部署在 Apache Tomcat 服务器上。 该应用的来源可从作者的 Github 存储库中获得。
Figure: Project structure
该图显示了 NetBeans 中的项目结构。
context.xml
context.xml
文件包含应用的上下文路径。
pom.xml
Maven pom.xml
包含 Java EE Web API,Hibernate Validator 和 Lombok 库的依赖项。
index.jsp
index.jsp
是我们应用的入口。 它包含一个带有两个字段的 HTML 表单:用户名和电子邮件。 在这些字段中输入的值将由应用验证。
提交表单后,将调用Greet
Servlet。
hello.jsp
当输入数据通过验证测试时,将显示hello.jsp
页面。 显示输入的数据。
valError.jsp
如果验证失败,则显示valError.jsp
。 它显示了存储在errMsg
属性中的错误消息。 该属性是在验证过程中设置的。
User.java
User
bean 用 Lombok 和 Hibernate Validator 注释修饰。
@NotEmpty
注释导致用户名不能为空。
电子邮件不能为空,并且必须匹配给定的模式。 用@Pattern
注释设置模式。
DoValidate.java
验证在DoValidate
实用程序类中执行。
当违反约束时,我们将创建错误消息列表。 getMessage()
方法获取约束冲突的错误消息。
错误消息列表将返回给调用方。 如果未检测到违规,则该列表为空。
Greeting.java
Greeting
Servlet 检索请求数据并调用DoValidate.validate()
实用程序方法。 取决于验证的结果,该 servlet 调度到hello.jsp
或valError.jsp
页面。
Figure: Error message
如果电子邮件格式不正确,则应用将以错误消息响应。
这是验证过滤器教程。 我们使用 Hibernate Validator,JSTL,JSP,Apache Tomcat 和 Maven 构建了一个控制台和一个 Web 应用。