10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Bean 验证规范初稿发布

  • 2008-04-14
  • 本文字数:1276 字

    阅读完需:约 4 分钟

在大多数企业级应用中,数据约束会存在于下面两个地方:
1. 模型中(比较典型的就是数据库架构约束)。
2. 应用程序代码中。
这两处都非常重要。在需要迁移应用程序代码的情况下,数据库约束允许重用底层数据模型。与用模型级约束轻松实现的粒度控制比起来,应用级验证能提供更好的粒度控制(这是不是一个有效的 E-mail 地址?客户的生日是否尚未到来?),也能更容易地为应用用户提供有意义的错误信息。应用级验证可以完全存在于多个地方,从而造成应用不同层之间大量的重复工作。举例来说,在一个典型的 Web 应用中,浏览器会执行 JavaScript 进行简单的域级验证,服务器层则验证更为复杂的业务规则。能在一个地方集中定义验证、在应用的不同层之间共享这些定义,该是非常可取的。

在 Hibernate Validator 高级开发人员 Emmanuel Bernard 的带领下,JSR-303 旨在标准化 Java EE 6 的约束元数据模型。规范的初稿已经发布,专家组也在积极征求反馈。做为这项工作的一部分,已经创建了一个论坛,Bernard 也开始在Hibernate 的博客中发表一系列描述API 工作原理的文章(第一部分第二部分)。

知道了JSR-303 规范的起源,JSR-303 很大程度上受JBoss Hibernate Validations 的影响也就不足为怪了,尽管很多其它验证框架(比如Xwork 和Apache Commons Validator)也影响了该规范。JSR-303 在大多数情况下使用Annotation,并为运行时验证提供标准的APIs 来查询元数据。每个约束Annotation 都必须定义一个String 类型的信息来创建错误信息。错误信息支持国际化。可以对对象的属性、Get 方法、类、父类、接口声明约束,验证对象会验证该对象所有的约束。比如说,下面的代码创建了一个叫street1 的字符串,它的最大长度是50 个字符,而且不允许为空:

@NotEmpty @Max(50)<br id="hzqs"></br>private String street1;

该框架设计为可扩展的,所以应用能很容易地定义自己特有的补充约束。第一篇博客文章中写道:

“约束由下面部分构成:
• Annotation
• 约束验证实现
Annotation 表示对域模型的约束,而验证实现则判断给定的值能否通过约束。”

规范不仅支持实例验证,也支持对象图的验证,那么举例来说,如果 ClientDetails Bean 包含一个带有一或多个 @Valid Annotation 的 Address Bean,验证器在验证 ClientDetails Bean 的时候也会验证 Address Bean 的内容。

规范和 Hibernate Validator 之间的一个重要不同是组的概念,组提供了创建验证子集的方法。组有一个关联序列(通过 @GroupSequence Annotation 设置),所以开发人员可以在下一组约束执行之前强制通过一组约束而不产生错误。组也允许 JavaBean 的部分验证。规范初稿提出了可能有用的两种场景:

“• 第二种组完全运行需要依赖于稳定状态
• 第二种组会严重消耗时间、CPU 或内存,应该尽可能避免使用”

Java EE 6 平台中多种技术都应该能利用 JSR-303。比如说,用 ORM 工具生成(DDL)时的 DLL 更新、由 Java 持久化 API 进行的插入 / 更新的实体验证、新的 WebBeans API、JavaServerFaces 组件,看似都很有希望。查看英文原文: Initial Draft of the Bean Validation Specification Released

2008-04-14 07:071115

评论

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

Java篇|忘记格式化代码,把女朋友鸽了

Jianmu

Java 自动化 持续集成 建木CI 格式化代码

2022年中国音频行业产品洞察分析

易观分析

音频体验 在线音频

大数据培训-Flink面试知识分享

@零度

flink 大数据开发

芯片变得更复杂的今天,你需要最大限度复用IP资源

龙智—DevSecOps解决方案

芯片行业思考 芯片开发 ip复用 ip资源 芯片行业

java版gRPC实战之一:用proto生成代码

程序员欣宸

Java gRPC

TDengine 助力智慧燃气,支撑数百万智能终端的接入管理

TDengine

教育行业可以用云管平台吗?有案例介绍吗?

行云管家

云计算 企业上云 云管平台 云管理

通过IPv6隧道实现天翼云云主机IPv4和IPv6双栈接入

天翼云开发者社区

网络

【新布局】火绒安全企业产品Linux终端、macOS终端开启公测

火绒安全

macos Linux 服务器 终端安全 Windows Server

知识文档管理系统:帮助企业管理文档

小炮

知识管理 文档管理

从0到100:基于微信小程序的羽毛球馆预约系统的开发笔记

CC同学

中科柏诚:用数字技术纾困解难,助力中小企业恢复成长活力

联营汇聚

【CI/CD研讨会报名,截止最后一天】全程参会,还有惊喜奖品等你拿!

龙智—DevSecOps解决方案

cicd 持续集成 jenkins CI/CD 持续发布

为什么要做等保二级,有什么好处?

行云管家

网络安全 等保 等保2.0

“既要性能,也要安全”,这样的Rust,谁不喜欢!

非凸科技

rust 编程语言 软件开发 招聘

20万字《网易智企技术合辑》重磅发布!

网易云信

人工智能 大数据 大前端 即时通讯IM 音视频技术

教你VUE中的filters过滤器2种用法

华为云开发者联盟

Vue 过滤器 filters过滤器 组件过滤器 全局过滤器

围绕用户体验持续进化 英特尔Evo平台打造开放、多元创新优势

科技新消息

向工程腐化开炮 | 治理思路全解

阿里巴巴终端技术

Java android 腐化治理 工程腐化

汉化版postman

Liam

Jmeter Postman 接口测试 API swagger

Apache APISIX 2.13.0 发布

API7.ai 技术团队

开源 API网关 API Gateway Apache APISIX

OpenHarmony标准设备应用开发(二)——布局、动画与音乐

OpenHarmony开发者

动画 OpenHarmony 音乐播放

Microchip推出模拟嵌入式SuperFlash技术解决边缘语音处理难题

极客天地

使用天翼云主机组功能让云主机不放在同一个篮子里

天翼云开发者社区

资产动态管理系统解决方案

低代码小观

资产管理 企业管理系统 CRM系统 客户关系管理系统 资产安全

后端开发—一文详解网络IO模型

Linux服务器开发

reactor 后端开发 Linux服务器开发 网络io 网络模型

菜鸟不菜,职场小白大变身

龙智—DevSecOps解决方案

Jira Jira插件 工作流扩展 并行审批 jira并行审批

使用对等连接在天翼云两个用户的云网络之间架起一座天桥

天翼云开发者社区

实战天翼云云主机系统盘扩容

天翼云开发者社区

云主机

#JiraHero:Soumen Deb——重塑 Jira Software 中的 Bug 工作流,提高可见性、简化开发流程

龙智—DevSecOps解决方案

Atlassian Jira

龙蜥开发者说:聊一聊我技术生涯的“三次迭代” | 第 3 期

OpenAnolis小助手

技术分享 开发者故事 龙蜥开发者说 突出贡献奖

Bean验证规范初稿发布_Java_Charles Humble_InfoQ精选文章