HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

架构师训练营第八章-作业1

A Matt

初识分布式:MIT 6.284系列(一)

Kerwin

分布式 MIT 28天写作

英特尔®AI计算盒参考设计发布 加速智能边缘崛起

最新动态

云小课 | IPv4枯了,IPv6来了

华为云开发者联盟

IP 公有云 虚拟私有云 华为云 虚拟化

微软苏州集体抵制来自阿里、华为的跳槽者:请停止你的“奋斗逼”行为!网友:看到 955 不加班的公司名单,我酸了

程序员生活志

程序员 加班 996

程序的机器级表示-算术与逻辑运算

引花眠

计算机基础

<<前端进阶篇>> PDF 出炉了 — 「阿宝哥」,精心准备的 6 万多字 170 页的前端进阶资料

阿宝哥

大前端

在人工智能时代追逐的“后浪”

华为云开发者联盟

程序员 AI 开发者 技术社区 华为云

飞天茅台超卖事故:Redis分布式锁请慎用!

程序员生活志

redis 分布式

什么?不写代码也能做功能开发! -RUOYI 教程二

Java_若依框架教程

Java 无代码开发 若依

JVM系列之:JIT中的Virtual Call

程序那些事

Java JVM JIT

第九周

hdhdh

手写一个重入锁

诸葛小猿

synchronized CAS 重入锁 compareAndSwap ReentrantLock

授人以渔:stm32资料查询技巧

华为云开发者联盟

架构 armv8 芯片 华为云 二进制

数据人必须知道的SQL概念(A—Z)

大唐小生

sql 数据 职场成长

你问我答:微服务治理应该如何去做?

BoCloud博云

容器 微服务 PaaS API 博云

Vue中使用装饰器,我是认真的

前端有的玩

Java Vue 装饰器

秒杀系统问题与方案设计

superman

秒杀 架构总结

谈一谈webpack打包

林浩

Java 大前端 webpack

ARTS打卡 第10周

引花眠

ARTS 打卡计划

老哥,您看我这篇Java集合,还有机会评优吗?

苹果看辽宁体育

Java 后端

Newbe.Claptrap 框架如何实现多级生命周期控制?

newbe36524

架构 微服务 .net core ASP.NET Core

实用!一键生成数据库文档,堪称数据库界的Swagger

程序员小富

Java MySQL

基于 Golang的侵入式 Opentracing实现全链路追踪 ----实践篇

是老郭啊

财务分析与主要的模型

松子(李博源)

系统设计系列之如何设计一个短链服务

看山

架构 面试 分布式 架构设计 短链服务

技术管理者带团队的几个实用技巧

Phoenix

团队管理 企业文化 团队 价值观

智能膜切机,解决手机贴膜行业难题

Geek_116789

华为云GaussDB(DWS)内存知识点,你知道吗?

华为云开发者联盟

数据库 大数据 数据 内存 华为云

计算机网络基础(十一)---网络层-OSPF协议

书旅

计算机网络 网络 协议栈 OSPF

《深度工作》学习笔记(3)

石云升

学习 深度工作 工作哲学

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