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方法和类作用域注解的支持。

自己写的基于java Annotation(注解)的数据校验框架的更多相关文章

  1. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  2. java Annotation 注解的使用

    源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...

  3. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  4. Spark 介绍(基于内存计算的大数据并行计算框架)

    Spark 介绍(基于内存计算的大数据并行计算框架)  Hadoop与Spark 行业广泛使用Hadoop来分析他们的数据集.原因是Hadoop框架基于一个简单的编程模型(MapReduce),它支持 ...

  5. JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  6. SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验

    对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...

  7. JAVA 利用反射自定义数据层框架

    之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者 ...

  8. Java Annotation注解继承说明

    有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...

  9. 基于java容器注解---基于泛型的自动装配

    上面利用@Configuration和@Bean配置bean,中间利用@Autowired,指定s1和s2分别指向哪个实现类,下面利用@Autowired,指定s中只有Integer实现类 例子: 在 ...

随机推荐

  1. OC中第三方库MJExtension的使用

    MJExtension是一套常用的"字典和模型之间互相转换"的框架,在项目中也使用过,现在记录一下.随着Swift的普及,在Swift中也有一个类似功能的框架HandyJSON 也 ...

  2. openstack 官方镜像qcow2 下载和修改密码

    下载地址: CentOS6:http://cloud.centos.org/centos/6/images/ CentOS7:http://cloud.centos.org/centos/7/imag ...

  3. ABAP 面向对象(Object Orientation) OO

    [转自 http://blog.sina.com.cn/s/blog_7c7b16000101bhof.html]在程序中, 对象的识别和寻址是通过对象引用来实现的, 对象引用变量可以访问对象的属性和 ...

  4. 更改node版本

    npm install -g n n stable 或 n v4.5.0

  5. PAT 天梯赛 L2-007. 家庭房产 【并查集】

    题目链接 https://www.patest.cn/contests/gplt/L2-007 思路 将一个家庭里的所有人都并进去 然后最后查找的时候 找到所有同一个家庭的人,计算出人数,人均房产套数 ...

  6. iOS UITableViewCell UITableVIewController 纯代码开发

    iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...

  7. 回忆基础:制作plist文件

    -(void)creatPlistFileWithArr:(NSArray *)array{ //将字典保存到document文件->获取appdocument路径 NSString *docP ...

  8. Python3 内置函数补充匿名函数

    Python3 匿名函数 定义一个函数与变量的定义非常相似,对于有名函数,必须通过变量名访问 def func(x,y,z=1): return x+y+z print(func(1,2,3)) 匿名 ...

  9. 2014年互联网IT待遇

    1. 13k*14~16k*145.美团 13k*15~16k*15,也有更高的.6.去哪儿 11k*16~15k*167.人人技术类(12K-14K)*14 (2014)8.58同城 20w+9.网 ...

  10. uitableview 刷新一行

    ios UITableview 刷新某一行 或 section   //一个section刷新     NSIndexSet *indexSet=[[NSIndexSet alloc]initWith ...