自己写的基于java Annotation(注解)的数据校验框架
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(注解)的数据校验框架的更多相关文章
- paip.Java Annotation注解的作用and 使用
paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...
- java Annotation 注解的使用
源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- Spark 介绍(基于内存计算的大数据并行计算框架)
Spark 介绍(基于内存计算的大数据并行计算框架) Hadoop与Spark 行业广泛使用Hadoop来分析他们的数据集.原因是Hadoop框架基于一个简单的编程模型(MapReduce),它支持 ...
- JAVA - Annotation 注解 入门
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验
对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...
- JAVA 利用反射自定义数据层框架
之前的随笔一直都在介绍c#,主要公司最近的业务都是做桌面程序,那么目前c#中的WPF肯定是我做桌面程序的不二之选,做了半年的WPF,也基本摸清了c#写代码的套路和规则(本人之前是两年多的JAVA开发者 ...
- Java Annotation注解继承说明
有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...
- 基于java容器注解---基于泛型的自动装配
上面利用@Configuration和@Bean配置bean,中间利用@Autowired,指定s1和s2分别指向哪个实现类,下面利用@Autowired,指定s中只有Integer实现类 例子: 在 ...
随机推荐
- 【python】-- 基本语法、循环
数据类型 1.数字: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...
- JS异错面试题
转自 http://www.codeceo.com/article/one-javascript-interview.html function Foo() { getName = function ...
- [luogu3393]逃离僵尸岛
[luogu3393]逃离僵尸岛 luogu 先把被禁止的点和新建的虚点n+1连0边 跑最短路,dis<=s的点价格为Q,否则为P, 再建图跑最短路 #define ll long long # ...
- SAP 物料 移动类型
[转自 http://blog.sina.com.cn/s/blog_494f9a6b0102edf7.html] SAP 物料 移动类型 (2013-12-03 10:15:01) 转载▼ 分类 ...
- shell if判断-n
test测试命令 test命令用于检查某个条件是否成立,它可以进行数值.字符串和文件三个方面的测试,其测试符和相应的功能分别如下: (1)数值测试: -eq:等于则为真 -ne:不等于则 ...
- full_case parallel_case学习心得
一般情况下,DC把case语句综合成选择器电路,但也可能把case语句综合成优先权译码电路.有时,优先权译码电路是不必要的,这是可以使用“// synopsys parallel_case”引导语句强 ...
- 剑指offer——树中两个节点的最低公共祖先
代码来源与<剑指offer> 得到从根节点开始到输入的两个结点的两条,需要遍历两次树,每遍历一次的时间复杂度是O(n),得到的两条路径的长度在最差情况时是O(n),通常情况下两条路径的长度 ...
- thinkphp 的 Action 控制器中的系统常量总结
THINK_PATH // ThinkPHP系统目录 APP_PATH // 当前项目目录 APP_NAME // 当前项目名称 CONTROLLER_NAME // 当前控制器名称 MODULE_N ...
- Windows 7 比Windows XP 难用的功能
Windows 7 的搜索功能做得实在难用,不仅慢,还经常搜不到文件(明明存在的文件却搜不到).相比Windows XP,这个功能差的太远了. Windows 7 的无线连网功能,即使设置为不要自动连 ...
- 处理 javax.el.ELException: Failed to parse the expression 报错
在JSP的表达式语言中,使用了 <h3>是否新Session:${pageContext.session.new}</h3> 输出Session是否是新的,此时遇到了 j ...