“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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:07651

评论

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

万字长文 | 16张图解开AbstractQueuedSynchronizer

程序猿阿星

并发编程 AQS 线程安全 多线程并发

graphql计算指令之@filter:查询中实现集合过滤

杜艮魁

开源 后端 低代码 graphql

15个经典面试问题,酸!校招进字节跳动

Java 程序员 后端

Java入门你值得拥有!浅谈Facade外观模式

Java 程序员 后端

12~18k的前端面试会问个啥?

前端依依

学习 程序员 面试 大前端 经验分享

3个月学会Java开发!Git-如何优雅地回退代码(1)

Java 程序员 后端

解决方案|在线自习室

anyRTC开发者

音视频 在线教育 RTC RTM

5分钟搞定!从Java底层分析多线程行为

Java 程序员 后端

Java入门你值得拥有!天天都是面对对象编程,你真的了解你的对象吗

Java 程序员 后端

带你使用FFMPEG将MP4视频文件转换为GIF

hanaper

金九银十想面BAT?那这些JDK动态代理的面试点你一定要知道

编程菌

Java 编程 程序员 计算机 技术宅

读书日送书丨关于音视频技术你需要知道的二三事

声网

人工智能

【网络安全】渗透工程师面试题总结大全

网络安全学海

面试 网络安全 信息安全 渗透测试 漏洞

230页,看完之后你就会知道,原来Redis还能这么玩!

Java架构师迁哥

这些奥运“黑科技”运用了哪些AI技术?

澳鹏Appen

自动驾驶 机器学习 人脸识别 nlp 数据标注

Cloud Studio 2.0:云的开端

CODING DevOps

ide DevOps 开发环境 Cloud Studio

iOS底层学习【KVC】

程序员 iOS底层

2021金三银四,开发者进阿里必看的30道经典数据库面试题【附详细解析

策划Java工程师

Java 程序员 后端

graphql计算指令之@sortBy:查询中实现列表字段排序

杜艮魁

开源 后端 低代码 graphql

网络攻防学习笔记 Day95

穿过生命散发芬芳

态势感知 网络攻防 8月日更

【Vue2.x 源码学习】第二十五篇 - 数组依赖收集的原理

Brave

源码 vue2 8月日更

80后程序员感慨中年危机,如何设计一个优雅的RESTFUL的接口

Java 程序员 后端

如何洞察出消费者购买的关键时刻

石云升

用户体验 关键时刻 体验设计 8月日更

Nacos注册中心之概要设计

捉虫大师

微服务 nacos 服务发现

SpringBoot 整合 Drools

LeifChen

drools springboot 规则引擎 8月日更 业务规则

2021BTAJ面试真题详解,16条代码规范建议,快看看自己做到没

Java 程序员 后端

IBM大面积辞退40岁+的员工,瞧一瞧

Java 程序员 后端

当一只「无头苍蝇」又何妨?

非著名程序员

读书笔记 提升认知 个人提升 8月日更

Error SHA256 mismatch

一个大红包

8月日更

Java入门视频教程!Kotlin(2)-泛型与集合

Java 程序员 后端

【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码

编程三昧

面试 大前端 HTTP 8月日更

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