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
&nbsp;&nbsp; "-//OVal/OVal Configuration DTD 1.3//EN"
&nbsp;&nbsp; "<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>"
&nbsp;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"
>
&nbsp;<!-- define a constraint set -->
&nbsp;<!--<constraintSet id="user.userid">
&nbsp;&nbsp;<notNull message="{context} is null" />
&nbsp;&nbsp;<matchPattern message="{context} does not match the pattern {pattern}">
&nbsp;&nbsp;&nbsp;<pattern pattern="<a href="file://\\d{15}|\\d{17}+[\\dX">\\d{15}|\\d{17}+[\\dX</a>]" flags="0" />
&nbsp;&nbsp;</matchPattern>
&nbsp;</constraintSet>--></p><p>&nbsp;<class type="com.haove.oval.TrainData" overwrite="false" applyFieldConstraintsToSetters="false">
&nbsp;&nbsp;
&nbsp;&nbsp;<field name="sfzh">
&nbsp;&nbsp;&nbsp;<matchPattern message="身份证号不符合规则">
&nbsp;&nbsp;&nbsp;<pattern pattern="[0-9]{15}|[0-9]{17}[0-9X]" flags="0" />
&nbsp;&nbsp;&nbsp;</matchPattern>
&nbsp;&nbsp;</field>
&nbsp;&nbsp;
&nbsp;&nbsp;<field name="xm">
&nbsp;&nbsp;&nbsp;<length min="1" max="24" message="姓名为 {min} 至 {max}个字符" />
&nbsp;&nbsp;&nbsp;<validateWithMethod methodName="isValid" parameterType="java.lang.String" message="姓名与学籍库不一致"/>
&nbsp;&nbsp;</field>
&nbsp;&nbsp;
&nbsp;&nbsp;<field name="qjStart">
&nbsp;&nbsp;&nbsp;<length min="1" message="区间起点不能少于{min}个字符" />
&nbsp;&nbsp;</field>
&nbsp;&nbsp;
&nbsp;&nbsp;<field name="qjEnd" overwrite="true">
&nbsp;&nbsp;&nbsp;<length min="1" message="区间终点不能少于{min}个字符" />
&nbsp;&nbsp;</field></p><p>&nbsp;&nbsp;<field name="rxrq">
&nbsp;&nbsp;&nbsp;<matchPattern message="入学日期为8位数字">
&nbsp;&nbsp;&nbsp;<pattern pattern="[0-9]{8}"/>
&nbsp;&nbsp;&nbsp;</matchPattern>
&nbsp;&nbsp;</field>
&nbsp;&nbsp;<field name="yhcs">
&nbsp;&nbsp;&nbsp;<matchPattern message="优惠次数为一位或两位数字">
&nbsp;&nbsp;&nbsp;<pattern pattern="[0-9]{1,2}" flags="0" />
&nbsp;&nbsp;&nbsp;</matchPattern>
&nbsp;&nbsp;</field>
&nbsp;&nbsp;
&nbsp;&nbsp;<field name="kxlh">
&nbsp;&nbsp;&nbsp;<length min="1" message="卡序列号不能少于{min}个字符" />
&nbsp;&nbsp;</field>
&nbsp;</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){

        }
    }
}

参考:http://blog.csdn.net/haove/article/details/6901366

Java对象校验框架之Oval

时间: 2024-08-01 00:16:43

Java对象校验框架之Oval的相关文章

Java 简单校验框架

数据校验框架现状 在我们的方法入口后面,难免会有如下样子的代码: result.setSuccess(false); if (StringUtils.isBlank(bizOrder.getThirdOrder())) { result.setResultMessage("thirdOrder不能为空"); return result; } if(bizOrder.getThirdOrder().length() > 100){ result.setResultMessage(&

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

Stripes视图框架Java对象属性验证,它允许对字段设置是否必须填写,对数字大小进行限制等.我用prototype.js Ajax 将验证后的数据及时地展示出来,下面来看程序. 1.编写User实体类 此用户共三个属性: name.email.age. package com.boonya.stripes.entity;      public class User {              private String name;              private String

xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定别名 支持注解 @Ignore 指定忽略的字段 变更日志 CHANGE_LOG 快速开始 准备 jdk 1.7+ maven 3.x+ maven 引入 <dependency> <groupId>com.github.houbb</groupId> <artifac

xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写x

xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定别名 支持注解 @Ignore 指定忽略的字段 变更日志 CHANGE_LOG 快速开始 准备 jdk 1.7+ maven 3.x+ maven 引入 <dependency> <groupId>com.github.houbb</groupId> <artifac

Java 之利用OkHttpClient进行简单的http请求,利用Jackson框架把json转化为java对象的实现

实现的业务逻辑是这样的:通过http请求,返回一个json格式的数据,然后将json数据转化为java对象返回给调用方.Http采用OkHttp库,json转化采用jackson库.一.简介1)okhttpclientOkHttpClient官网: http://square.github.io/okhttp/OkHttp GitHub地址:https://github.com/square/okhttp最常用的是两个http请求是get和post,我下面的代码就只用到这两个请求.Maven依赖

JSON-lib框架,JAVA对象与JSON、XML之间的相互转换

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作  1. 首先要去官方下载json-lib工具包 下载地址: http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/ 目前最新的是2.4的版本,本示例中使用的是v2.3:json-lib还需要以下依赖包: jakar

Venus 是一个简单的、高性能、高并发能力的java 开源Remoting框架

Venus 是一个简单的.高性能.高并发能力的java 开源Remoting框架 wiki地址:http://wiki.hexnova.com/display/Venus/HOME 性能测试:http://wiki.hexnova.com/pages/viewpage.action?pageId=1507358 产品发布日志: http://wiki.hexnova.com/pages/viewrecentblogposts.action?key=Venus 1. 如何服务化 采用接口与实现分离

java后端校验

网站的后端校验是不可或缺的一部分,我们在后台验证表单时,可能需要把前端传过来的字段一个一个手工校验,或者使用框架的校验去做,今天我编写了一个校验框架,记录如下, 和大家一起分享.<转载请注明出处,谢谢> 1.代码总览 将需要校验的表单信息设置在src目录下的formVerify.xml里: Xmlparse4FormVerify.java负责读取解析formVerify.xml文件: VerifyRegularUtil.java负责处理正则表达式相关工作: 2.下面是具体文件及代码 1.for