写点什么

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:298259
用户头像

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

关注

评论

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

AOT使用经验总结

沙漠尽头的狼

京东零售推荐系统可解释能力详解

京东零售技术

人工智能 推荐模型 可解释

摩尔线程开源vLLM-MUSA 加速国产GPU AI

吴脑的键客

人工智能

能让企业“网络隐身”的SPA,到底是什么黑科技?

芯盾时代

网关 零信任 SPA

不要让基础技术设施成为稳定性瓶颈

老张

环境配置 基础架构 稳定性治理

TableFill:一天搞定1000人的数据填报工作

袋鼠云数栈

After Effects 2025 全新升级 铸就特效传奇!

Rose

我们的 WebAssembly 实验:扩展 NGINX Agent

NGINX开源社区

nginx Wasm nginx 开源版

大模型准确率从17%到90%!为什么提示词工程是今天最珍贵的技能?

本原智数

人工智能 大模型 生成式AI 提示词工程 本原智数

信阳等保测评机构有哪些?电话多少?

行云管家

等保 等保测评 信阳

Principle Mac破解版 交互式UI原型设计工具 v6.36 激活版

Rose

小游戏3.0时代,应回归到游戏价值本身

FinFish

小程序容器 小游戏 小游戏技术 实时互动技术

三分之一的生成式AI项目将被放弃?从零开始看RAG如何变现

本原智数

人工智能 大模型 生成式AI rag 本原智数

适合才最美:Shiro安全框架使用心得

威哥爱编程

Java javaWeb shiro JavaEE

adobe pr 2025有哪些新功能?

Rose

解压助手RAR Extractor - Unzip for mac,支持几乎所有的压缩格式

Rose

震惊!AI开展数据治理将超过人工和数据平台?

奇点云

大数据 AI 数据治理 大模型

Native Instruments Traktor Pro(数字DJ音乐制作平台)

Rose

抖音集团也在用的数仓「降本」利器

字节跳动数据平台

大数据 数据仓库 实时数仓 抖音

纽约时报诉OpenAI:生成式AI时代的数据陷阱与法律边界

本原智数

人工智能 数据采集 数据合规 本原智数

DolphinScheduler集成Arthas实现接口调用监控,提升调度任务可靠性

白鲸开源

工作流调度 Apache DolphinScheduler Arthas #监控 API 接口

大众点评诉百度,数据爬虫合法边界引关注

本原智数

人工智能 数据合规 本原智数 数据爬虫

开源建木荣获 GitCode年度十大开源社区荣誉

都广科技

#开源

使用SeaTunnel从InfluxDB同步数据到Doris

白鲸开源

Influxdb 数据同步 Apache SeaTunnel #开源

4K Wallpaper mac(600多种4K壁纸素材)

Rose

一书了解AI的下一个浪潮!

博文视点Broadview

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