50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Java EE 6 Bean Validation 提供了实体验证元数据模型与 API

  • 2010-03-20
  • 本文字数:2114 字

    阅读完需:约 7 分钟

在此前发布的 Java Enterprise Edition( JEE )6系列文章中,我们介绍了Java API for RESTful Web Services( JAX-RS )、Contexts and Dependency Injection( CDI )、 Web 端(Servlet 3、JSF 2)以及 EJB 3.1。在本系列文章行将结束之际,我们再来谈谈 Bean Validation( JSR 303 )——Java EE 6 的一个核心特性,它为实体验证定义了一个元数据模型和 API。其默认的元数据源是注解,但开发者可以通过 XML 描述符对其进行扩展。Validation API 并不依赖特定的应用层或是编程模型,这样同一套验证可由应用的所有层共享。它还提供了通过扩展 Validation API 来增加客户化验证约束的机制以及查询约束元数据仓库的手段。

在 JEE6 的 Bean Validation 出现之前,开发者不得不在表示层框架、业务层以及持久层中编写验证规则以保证这些规则的同步性,但这么做非常浪费时间而且极易出错。Bean Validation 是通过约束实现的,这些约束以注解的形式出现,注解可以放在 JavaBean(如 backing bean)的属性、方法或是类上面。 约束既可以是内建的注解(位于 javax.validation.constraints 包下面),也可以由用户定义。一些常用的内建注解列举如下:

  • Min:被 @Min 所注解的元素必须是个数字,其值要大于或等于给定的最小值。
  • Max:被 @Max 所注解的元素必须是个数字,其值要小于或等于给定的最大值。
  • Size @Size 表示被注解的元素必须位于给定的最小值和最大值之间。支持 Size 验证的数据类型有 String、Collection(计算集合的大小)、Map 以及数组。
  • NotNull @NotNull 确保被注解的元素不能为 null。
  • Null @Null 确保被注解的元素一定为 null。
  • Pattern @Pattern 确保被注解的元素(String)一定会匹配给定的 Java 正则表达式。

下面的示例来自于 Java EE 6系列文章,代码中通过 Bean Validation 注解声明了一些约束:

复制代码
public class Address {
@NotNull @Size(max=30)
private String addressline1;
@Size(max=30)
private String addressline2;
public String getAddressline1() {
return addressline1;
}
public void setAddressline1(String addressline1) {
this.addressline1 = addressline1;
}
}

@NotNull 指定被注解的元素 addressline1 不能为 null;@Size 指定被注解的元素 addressline1 和 addressline2 不能超过给定的最大值,即 30 个字符。

在验证 Address 对象时,addressline1 的值被传递到针对 @NotNull 约束的验证类以及针对 @Size 约束的验证类中,而 addressline2 的值被传递到针对 @Size 约束的验证类中,由相关的验证类进行验证。

如下代码自定义了一个名为 ZipCode 的约束:

复制代码
@Size(min=5, max=5)
@ConstraintValidator(ZipcodeValidator.class)
@Documented
@Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface ZipCode {
String message() default "Wrong zipcode";
String[] groups() default {};
}

可以将 @ZipCode 用在类、属性或是方法上,就像其他约束一样。

复制代码
public class Address {
@ZipCode
private String zipCode;
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}

Validation API

开发者可以借助于 Validation API 以编程的方式验证 JavaBean。Bean Validation API 的默认包是 javax.validation。下面对该包中的一些类进行说明:

ConstraintValidator:这是一个接口,具体的约束验证类需要实现该接口。该接口定义了相关的逻辑以验证给定对象类型中的约束。

Validator:Valida http://java.sun.com/javaee/6/docs/api/index.html?javax/validation/Validator.html tor 接口持有对象验证图的契约。该接口的实现必须是线程安全的。

ConstraintViolation ConstraintViolation 接口表示给定 bean 上的约束验证失败,它公开了约束违背上下文以及描述该违背情况的信息。

ValidationException:如果在验证过程中出现了某些不可恢复的错误就会抛出 ValidationException 异常。某些情况下可以指定该异常,如不合法的分组(group)定义、不合法的约束定义以及不合法的约束声明等等。

约束元数据请求 API

Bean Validation 规范提供了查询约束仓库的手段。该 API 主要用于工具支持和与其他框架、库以及 JSR 的集成。Bean Validation 规范旨在为对象约束提供一个验证引擎和元数据仓库。需要进行约束定义、验证和元数据的框架(Java EE 或 Java SE)可以利用 Bean Validation 规范完成这些功能,从应用或是基础设施的角度来看,这么做可以避免不必要的重复工作。

Bean Validation 已经集成到了 JSF 2.0 JPA 2.0 中。在 JSF 中可以将表单输入域与域对象的属性绑定起来。JSF 2 和 Bean Validation 可以判断出绑定的是哪个属性并执行与之相关的验证,还会将约束违背的信息显示给用户。

Hibernate Validator 4 是 Bean Validation 规范的参考实现框架,其最新版增加了不少新特性,如分组验证、与JPA 2 和JSF 2 的自然集成以及扩展的注解集等等。

查看英文原文: Java EE 6 Bean Validation Provides Entity Validation Metadata Model and API

2010-03-20 04:298327
用户头像

发布了 88 篇内容, 共 272.6 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

万物皆可DAO?一文带你全方位解读DAO类型

One Block Community

区块链 开发者 治理 DAO web3、

云堡垒机相关概念汇总说明-行云管家

行云管家

云计算 网络安全 数据安全 堡垒机

深度解决企业传统办公痛点,华为云桌面使能云上办公!

科技之光

你的下一个电脑桌面,为何是云桌面?

科技之光

可适配多企业需求,华为云等保合规安全解决方案选择灵活!

科技之光

2022 云栖大会 | 开源人说预约:听百味技术人生,品激荡开源江湖

阿里云大数据AI技术

阿里云 开源

80Gbps 双向带宽,120Gbps 疾速传输,英特尔携新一代 Thunderbolt 引领行业快步向前

科技之家

何为云管平台?有什么作用?哪家好?

行云管家

云计算 云主机 云管理 云成本

Docker | 部署nginx服务

甜点cc

nginx Docker 10月月更

华为云CDN使能千行百业,业务价值不断凸显!

科技之光

2022年10月《中国数据库行业分析报告》重磅发布!精彩抢先看

墨天轮

数据库 oceanbase Milvus 向量计算 向量数据库

华为云,高品质保障企业的等保安全

科技之光

git-secret:在 Git 存储库中加密和存储密钥(下)

SEAL安全

git 加密 makefile 密钥管理 10月月更

8K AV1视频解码大战:Intel神奇、NVIDIA差点、AMD无语

科技之家

华为云,中小型企业的等保安全专家

科技之光

华为云灾备解决方案,助力企业高效构建安全合规云灾备系统

科技之光

技术强、资源多,华为云等保合规解决方案助力企业快速过等保!

科技之光

Docker | 容器数据卷详解

甜点cc

Docker 前端 10月月更

2022 云栖大会 | 一体化大数据智能峰会预约开启

阿里云大数据AI技术

大数据 阿里云 开源

全球累计用户达300万+,华为云桌面综合体验优秀!

科技之光

Wallys/IPQ4018/IPQ4028 2x2 2.4Ghz 2x2 5Ghz Industrial-grade //wifi5 Support 11ABGN/AC

wallys-wifi6

IPQ4018 IPQ4028

如何通过C#/VB.NET重命名Excel表格并设置选项卡颜色

在下毛毛雨

C# .net Excel 重命名工作表

华为云灾备服务,如何守护云上数据

科技之光

企业信息安全受威胁?且看华为云灾备如何破解

科技之光

十年磨一剑,华为云数据灾备解决方案为你解决后顾之忧

科技之光

及时恢复,华为云灾备数据解决方案让你无忧办公

科技之光

JavaScript知识点总结

木偶

前端 js 10月月更

华为云,助力企业快速省心过等保

科技之光

打造全栈安全防护体系,华为云等保合规解决方案帮企业30天过等保

科技之光

Java EE 6 Bean Validation提供了实体验证元数据模型与API_Java_Srini Penchikala_InfoQ精选文章