Java对象校验框架之Oval
只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval。
OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java 语言、JavaScript 、Groovy 、BeanShell 等进行规则的编写。
使用起来也非常简单
public class OvalTest {
@Min(20)
private int age;
@Length(min = 6, max = 10)
private String name; public static void main(String[] args) {
OvalTest ovalTest = new OvalTest();
ovalTest.age = 10;
ovalTest.name = "kolor"; Validator validator = new Validator(); List<ConstraintViolation> ret = validator.validate(ovalTest);
System.out.println(ret);
}
}
<p><?xml version="1.0" encoding="UTF-8"?>
<!--
<!DOCTYPE oval PUBLIC
"-//OVal/OVal Configuration DTD 1.3//EN"
"<a href="http://oval.sourceforge.net/oval-configuration-1.3.dtd">http://oval.sourceforge.net/oval-configuration-1.3.dtd</a>">
-->
<oval xmlns="<a href="http://oval.sf.net/oval-configuration">http://oval.sf.net/oval-configuration</a>" xmlns:xsi="<a href="http://http://www.w3.org/2001/XMLSchema-instance">http://http://www.w3.org/2001/XMLSchema-instance</a>"
xsi:schemaLocation="<a href="http://oval.sf.net/oval-configuration">http://oval.sf.net/oval-configuration</a> ../../../../../../../../main/resources/net/sf/oval/configuration/xml/oval-configuration.xsd"
>
<!-- define a constraint set -->
<!--<constraintSet id="user.userid">
<notNull message="{context} is null" />
<matchPattern message="{context} does not match the pattern {pattern}">
<pattern pattern="<a href="file://\\d{15}|\\d{17}+[\\dX">\\d{15}|\\d{17}+[\\dX</a>]" flags="0" />
</matchPattern>
</constraintSet>--></p><p> <class type="com.haove.oval.TrainData" overwrite="false" applyFieldConstraintsToSetters="false">
<field name="sfzh">
<matchPattern message="身份证号不符合规则">
<pattern pattern="[0-9]{15}|[0-9]{17}[0-9X]" flags="0" />
</matchPattern>
</field>
<field name="xm">
<length min="1" max="24" message="姓名为 {min} 至 {max}个字符" />
<validateWithMethod methodName="isValid" parameterType="java.lang.String" message="姓名与学籍库不一致"/>
</field>
<field name="qjStart">
<length min="1" message="区间起点不能少于{min}个字符" />
</field>
<field name="qjEnd" overwrite="true">
<length min="1" message="区间终点不能少于{min}个字符" />
</field></p><p> <field name="rxrq">
<matchPattern message="入学日期为8位数字">
<pattern pattern="[0-9]{8}"/>
</matchPattern>
</field>
<field name="yhcs">
<matchPattern message="优惠次数为一位或两位数字">
<pattern pattern="[0-9]{1,2}" flags="0" />
</matchPattern>
</field>
<field name="kxlh">
<length min="1" message="卡序列号不能少于{min}个字符" />
</field>
</class>
</oval></p>
这个xml里包含了<notNull />,<notBlank />,<validateWithMethod />,<dateRange />,<pattern />等几种校验,比较有特点的是可以自定义方法校验validateWithMethod,有了这个就可以将校验扩展的更加强大,比如说可以将数据跟数据库里的数据进行比较校验。还有其他校验,可以参考源码,或问我。
另外,经查源码,发现方法public List<ConstraintViolation> validateFieldValue(final Object validatedObject, final Field validatedField, final Object fieldValueToValidate)可以只校验自己想校验的field,不会校验全部field,这个在有些时候还是蛮有用的。
另外附上,使用xml校验的java源码例子:
import java.lang.reflect.Field;
import java.util.List; import net.sf.oval.ConstraintViolation;
import net.sf.oval.Validator;
import net.sf.oval.configuration.xml.XMLConfigurer; public class TrainData {
private String xm;
private String sfzh;
private String qjStart;
private String qjEnd;
private String rxrq;
// @ValidateWithMethod(methodName = "isValid", parameterType = String.class)
private String yhcs;
private String kxlh;
public TrainData(){}
public TrainData(String xm, String sfzh, String qjStart, String qjEnd, String rxrq, String yhcs, String kxlh){
this.xm = xm;
this.sfzh = sfzh;
this.qjStart = qjStart;
this.qjEnd = qjEnd;
this.rxrq = rxrq;
this.yhcs = yhcs;
this.kxlh = kxlh;
}
private boolean isValid(String xm) {
//to do 数据库根据身份证号查询出的姓名进行比较
if("1".equals(xm))
return true;
return false;
}
public static void main(String[] args) {
try{
TrainData data = new TrainData("刘艳梅","11010619770201304","","","20050101","2","123");
XMLConfigurer x2 = new XMLConfigurer();
x2.fromXML(XMLConfigurationTest.class.getResourceAsStream("TrainDataValidation.xml"));
Validator validator = new Validator(x2);
// Validator validator = new Validator();
// Field f=TrainData.class.getDeclaredField("xm");
// List<ConstraintViolation> violations = validator.validateFieldValue(new TrainData(), f, "12");
List<ConstraintViolation> violations = validator.validate(data);
for(ConstraintViolation var:violations){
System.out.println(var.getMessage());
}
}catch(Exception ex){ }
}
}
Java对象校验框架之Oval的更多相关文章
- Java 简单校验框架
数据校验框架现状 在我们的方法入口后面,难免会有如下样子的代码: result.setSuccess(false); if (StringUtils.isBlank(bizOrder.getThird ...
- Dubbo的Filter实战--整合Oval校验框架
前言: 其实很早之前就想写一篇关于oval和具体服务相整合的常见做法, 并以此作为一篇笔记. 趁现在项目中间空闲期, 刚好对dubbo的filter有一些了解. 因此想结合两者, 写一下既结合校验框架 ...
- 自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- (转)Hibernate框架基础——Java对象持久化概述
http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构 说明 ...
- xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml
xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...
- JSON-lib框架,JAVA对象与JSON、XML之间的相互转换
Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...
- 测试json字符和java对象属性不一样在多个json框架下转换的表现
package com.longge.mytest; import java.io.IOException; import org.junit.Test; import com.alibaba.fas ...
- (转)Hibernate框架基础——在Hibernate中java对象的状态
http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...
随机推荐
- [ASP.NET]SQL Server 连接字符串和身份验证
SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开. PropertyName1=Value1; Property ...
- iOS - UI - UIActivityIndicatorView
1.UIActivityIndicatorView HUD 指示器 UIActivityIndicatorView * indicatorView = [[UIActivityIndicatorVie ...
- DML 数据操纵语言
1.INSERT(插入)语言结构 INSERT INTO table(表名)(要插入的列名) VALUES(要插入的具体值): table:要插入数据的表的表名 column[,column]:表中要 ...
- 剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字
/************************************************************************* > File Name: 38_Number ...
- OpenShare常见问题及解答
OpenShare常见问题及回答: Q:OpenShare可以整合SAP么? A:当然可以,OpenShare是真正完全开放的产品,但要进行二次开发,事实上我们帮我们大部分的客户都整合了SAP,包括数 ...
- css子元素的margin-top为何会影响父元素
详细内容请点击 这个问题困惑了很久,虽然没有大碍早就摸出来怎么搞定它,但始终不明白原因出在哪里,如果只是IE有问题我也不会太在意,可问题是所有上等浏览器都表现如此,这样叫我怎能安心?今天总算下狠心查出 ...
- 邮箱格式验证demo
<html> <head> <script type="text/javascript"> function validate_email(fi ...
- php学习笔记3--php中获取时间与实际时间不符
问题描述:在php脚本中使用date()获取服务器时间时总是与实际时间相差几个小时. 可能原因:php配置文件中时区的设置出现问题 解决方法: 方法1. php.ini文件中date.timezone ...
- Android ViewPager
昨天看到Weather&Clock Widget的页面滑动效果不错,了解了下可能是使用ViewPager来实现的,今天研究下,顺便记录下来. 根据Android官网的介绍,ViewPage ...
- MVC 下 使用MvcPager分页控件
先去下载 mvcpage http://mvcpager.codeplex.com/releases/view/64098只需要一个 MvcPager.dll文件即可 然后引用MvcPager.dll ...