博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己写的基于java Annotation(注解)的数据校验框架
阅读量:5334 次
发布时间:2019-06-15

本文共 1370 字,大约阅读时间需要 4 分钟。

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

 

转载于:https://www.cnblogs.com/duanxz/p/3892643.html

你可能感兴趣的文章
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>