JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架。有兴趣的可以扩展。

框架说明:

AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识。

GetFiledValue类:是一个工具类,对外提供一个静态方法public static Object getField(AnnotationValidable filter, String field)用于获得指定类对象的指定属性值。

Handler接口:是所有校验处理的接口。

ValidateException类:是校验框架中任何异常均被封装成该异常对象向上抛出。

该校验框架所提供的校验注解有:

@ValidateDigit:校验是否是数字。

@ValidateInt:校验整型数据,可以指定最大值或最小值。

@ValidateNotEmpty:校验集合对象中不能为空。

@ValidateNotLaterThan:校验一个时间或日期不能比另一个时间或日期晚。

@ValidateNotNull:校验对象不能为NULL。

@ValidatePattern:针对字符串的高级校验,可以指定字符串的正则表达式。

@ValidateSize:校验字符串的长度,可以指定最长长度或最短长度。

@ValidateStringIn:校验字符串中包含指定的字符(串),多个字符(串)用“,”分隔。

所有以上的注解都有一个message属性用于指定校验出差时异常信息内容,都有默认值,可以指定也可以不用指定。

这些注解里面的一些其他参数用法请参考UT中的测试用例。

以上所有的注解都有一个对应的Handler用于处理该注解,这些handler都实现Handler接口。

这些Handler具体负责每个对应的注解的校验,如果校验失败则抛出ValidateException异常。

校验框架最核心的是Validator,这个类是一个单态模式,使用时只需要调用其public void validate(AnnotationValidable validatedObj)方法,把需要校验的实现了AnnotationValidable接口的对象当作参数传进去就可以了。

Validator的工作原理是:

1.获得校验对象后,扫描该对象中是否存在自定义的校验注解,存在就去调用相应的注解处理类(对应的handler)进行校验。

2.校验对象校验结束后,递归校验其父类,直到AnnotationValidable接口为止。

优点:

1.使用方便,重用性高。

2.可以根据需求进行定制化开发。

3.适合后台的数据校验。

不足:

1.对应java Annotation不熟悉的人可能不太好上手。

2.有重复造轮子之嫌。

3.功能有限,目前只实现了在字段上注解的校验,尚未实现对get方法和类作用域注解的支持。

最新文章

  1. Codeforces Round #367 (Div. 2)
  2. SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
  3. ubuntu 制作deb 包
  4. Android 4.1源码编译找不到资源文件解决办法
  5. HDU 3920 Clear All of Them I(DP + 状态压缩 + 贪心)
  6. [XMPP]iOS聊天软件学习笔记[一]
  7. MySQL学习分享-->查询-->查询的分类
  8. AGC电路以及AD8347正交解调芯片
  9. (转)How Transformers Work --- The Neural Network used by Open AI and DeepMind
  10. SQL 数据开发(经典)转贴
  11. Docker & pure-ftpd 快速加建 FTP 服务器
  12. IISEXPRESS64位运行
  13. BZOJ 2277 Poi2011 Strongbox
  14. 新建ng工程
  15. centos 配置Openssl并创建证书
  16. Validate常用校验
  17. 如何控制iOS的导航栏和状态栏的样式
  18. 基于Apache在本地配置多个虚拟主机站点
  19. Ansible的Playbook的编写
  20. 将文本转换为json的工具类

热门文章

  1. Delphi编译指令说明
  2. centos7.0下删除yum和python之后恢复的办法
  3. 错误解决Error configuring application listener of class org.springframework.web.util.Log4jConfigListener(转发)
  4. butterknif
  5. 模仿jquery框架源码---网络
  6. iOS 基本数据类型 和 指针 特点
  7. vmware虚拟机安装MAC OSX10.10Yosemite简要记录
  8. SpringCloud之服务提供和服务调用的搭建
  9. mysql 在windows server下发生系统错误 1067, 进程意外终止的解决方法
  10. Ubuntu忘记用户密码解决方法--Authentication token manipulation error