`
wenjinglian
  • 浏览: 806030 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

介绍几种Java对象验证框架

    博客分类:
  • JAVA
阅读更多

(1) Apache Commons Validator

 

Commons -Validator包用来把验证规则程序提取出来,以供重复使用。这个包可以使用在Struts中,也可以独立的应用在任何其它的应用中。用户可以通过 java类的方式自定义验证方法,也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证,客户端的验证也支持,具体需要使用tag把 相应的js方法写入相应的页面中。

 

配置示例:

 

 

<form-validation>
    <global>
       <constant>
         <constant-name>验证方法的标志名</constant-name>
         <constant-value>正则表达式</constant-value>
       </constant>
       <validator name="这个验证方法的标志名,供下面的depends调用"
                  classname="这个验证方法在哪个类中,为类全名"
                  method="验证方法的名称"
                  methodParams="这个验证方法需要的参数类型,依次以逗号格开,为类全名"
                  depends="基于什么验证之上,可以为多个值,以逗号格开,值为方法的标志名"
                  jsFunction="js的方法全名,格式为文件路径.方法名。文件路径以点隔开,
                              如果不填,默认为org.apache.commons.validator.javascript.xxxx"
                  msg="对应于properties文件中的一条,作为不通过验证时返回的信息"/>
    </global>
    <formset language="语言" country="城市" variant="方言?">
       <constant>
         <constant-name>验证方法的标志名</constant-name>
         <constant-value>正则表达式</constant-value>
       </constant>
       <form name="bean 对象名称">
          <field property="bean中的属性名"   depends="需要什么样的验证,可以为多个值,以逗号格开,值为方法的标志名">
            <arg name = "变量名" key = "properties文件的key,或者来自Var的name" resource = "是/否来自资源文件"/>
            <var>
              <var-name>变量名</var-name>
              <var-value>变量值</var-value>
            </var>
          </field> 
       </form>
    </formset>   
</form-validation> 

 

 

官方地址:http://commons.apache.org/validator/index.html

 

 参考:http://hi.baidu.com/pengwx/blog/item/db85b84b33d785f183025ce8.html

 

(2) iScreen


iScreen是一个Java对象验证框架。它的思想与Apache Jakarta的commons-validator项目相似,验证规则使用XML进行配置但也支持其它配置类型。它比commons-validator更强大,灵活,易于使用。

 

示例:

 

<validation-root namespace="my.project">

  <validation-set id="RegistrationInfoSet" default-resource="theResource">

    <!-- First, let's validate the user's first name. -->
    <use-validator ref="org.iscreen.StringValidator">
      <mapping from="firstName" />
      <label key="label.FirstName" />
      <constraint property="minLength">1</constraint>
      <constraint property="maxLength">25</constraint>
    </use-validator>

    <!-- Now the last name. -->
    <use-validator ref="org.iscreen.StringValidator">
      <mapping from="lastName" />
      <label key="label.LastName" />
      <constraint property="minLength">1</constraint>
      <constraint property="maxLength">30</constraint>
    </use-validator>

    <!-- Make sure that the registration date is after the birthdate. -->
    <use-validator ref="org.iscreen.DateRangeValidator">
      <mapping from="birthDate" to="from" />
      <mapping from="registrationDate" to="to" />
      <label key="label.RegistrationDate" />
      <failure property="failure" key="failure.RegistrationDate" />
    </use-validator>

    <!-- Check the email address. -->
    <use-validator ref="org.iscreen.StringValidator">
      <mapping from="emailAddress" />
      <label key="label.EmailAddress" />
      <constraint property="minLength">1</constraint>
      <constraint property="maxLength">256</constraint>
    </use-validator>

  </validation-set>

  <resource id="theResource">
    <resource-file file="messages" />
  </resource>
</validation-root>

 

 

官方:http://i-screen.org/docs/index.html

 

 

(3) Java对象验证框架 OVal


OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java 语言、JavaScript 、Groovy 、BeanShell 等进行规则的编写。

 

示例:

 

 

private static class TestEntity
{
  @Min(1960)
  private int year = 1977;

  @Range(min=1, max=12)
  private int month = 2;

  @ValidateWithMethod(methodName = "isValidDay", parameterType = int.class)
  private int day = 31;

  private boolean isValidDay(int day)
  {
    GregorianCalendar cal = new GregorianCalendar();
    cal.setLenient(false);
    cal.set(GregorianCalendar.YEAR, year); 
    cal.set(GregorianCalendar.MONTH, month - 1);
    cal.set(GregorianCalendar.DATE, day);
    try {
      cal.getTimeInMillis(); // throws IllegalArgumentException
    } catch (IllegalArgumentException e) { 
      return false;
    }
    return true;
  }
}

 

OVal使用者
The following projects are using OVal:

eSciDoc

https://www.escidoc.org/

SaferJava

http://code.google.com/p/saferjava/

Pinky

https://github.com/pk11/pinky

JProvocateur

http://www.jprovocateur.org/

NexOpen

http://nexopen.sourceforge.net/

gdv.xport

http://repository.agentes.de/gdv/gdv-xport/site/

suz-lab-gae

http://code.google.com/p/suz-lab-gae/

Cubby Simple Web Application Framework

http://cubby.seasar.org/20x/cubby-oval/index.html

Metawidget

http://metawidget.org

Struts 2 OVal Plug-in

http://cwiki.apache.org/confluence/display/S2PLUGINS/OVal+Plugin

Play! Framework

http://www.playframework.org/

Cayenne annotations

http://sourceforge.net/projects/cayannotations/

jsfatwork

http://code.google.com/p/jsfatwork/

mtn4java

http://www.mvnrepository.com/artifact/org.criticalsection.mtn4java/mtn4java/

Polyforms

http://code.google.com/p/polyforms/

rsser

http://code.google.com/p/rsser/

saetc

http://code.google.com/p/saetc/

ultimate-roundtrip

http://code.google.com/p/ultimate-roundtrip/

 

官方:http://oval.sourceforge.net/

 

(4) JaValid

 

JaValid是一个基于标注的验证框架,它允许用户标注Java类来引入验证。JaValid可以应用于任何类型的Java应用程序

 

示例:

 

package org.javalid.examples.core.example01;
 
import org.javalid.annotations.core.JvGroup;
import org.javalid.annotations.core.ValidateDefinition;
import org.javalid.annotations.validation.MinLength;
import org.javalid.annotations.validation.NotEmpty;
import org.javalid.annotations.validation.NotNull;
 
@ValidateDefinition
public class Employee {
 
  private String firstName;
  private String lastName;
 
  public Employee() {
  }
 
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
 
  @JvGroup (groups={"group01"})
  @NotNull
  public String getFirstName() {
    return firstName;
  }
 
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
 
  @JvGroup (groups={"group01"})
  @NotEmpty
  @MinLength (length=4)
  public String getLastName() {
    return lastName;
  }
 
}
 

 

import java.util.List;
 
import org.javalid.core.AnnotationValidator;
import org.javalid.core.AnnotationValidatorImpl;
import org.javalid.core.ValidationMessage;
 
public class Test {
 
  public Test() {
  }
 
  public static void main(String[] args) {
    AnnotationValidator validator    = null;
    List<validationmessage> messages = null;
    Employee emp = null;
 
      // Creates a default core validator using default configuration
    validator = new AnnotationValidatorImpl(); 
 
      // Create our employee, as valid (no errors should be found)
    emp = new Employee();
    emp.setFirstName("Martijn");
    emp.setLastName("Reuvers");
 
      // Validate our employee
    messages = validator.validateObject(emp,"group01");
    System.out.println("Employee errors=" + messages.size()); // Should print 0
 
      // Make our employee invalid
    emp.setFirstName(null); // NotNull should get fired
    messages = validator.validateObject(emp,"group01");
    System.out.println("Employee errors=" + messages.size()); // Should print 1
    System.out.println("Message=" + messages.get(0)); // Should print a NotNull message error
 
      // Make our employee even more invalid
    emp.setLastName("");
    messages = validator.validateObject(emp,"group01");
    System.out.println("Employee errors=" + messages.size()); // Should print 2
    System.out.println("Messages=" + messages); // Should print a NotNull / NotEmpty message error    
 
      // Set firstName fine, lastName too short length but not empty
    emp.setFirstName("Martijn");
    emp.setLastName("Re");
    messages = validator.validateObject(emp,"group01");
    System.out.println("Employee errors=" + messages.size()); // Should print 1
    System.out.println("Messages=" + messages); // Should print a MinLength message error        
 
      // Finally, wrong group specified, validates nothing, as its not in the @JvGroup anywhere
    messages = validator.validateObject(emp,"invalidGroup");
    System.out.println("Employee errors=" + messages.size()); // Should print 0
  }
 
}
 

这个相对功能少些,好像目前不支持配置,纯注解。

 

官方: http://www.javalid.org/

 

 

个人认为大型的网站还是要使用配置的形式,统一管理验证规则。

 

不知道还有没有其它好的后台验证方式。

 

 

 

 

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java开源包11

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包6

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包9

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包4

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包101

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包5

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包8

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包10

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包1

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包3

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包2

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包7

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    Java资源包01

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java面试宝典

    68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个...

    J8Validate:Java 8 的验证框架

    #####Creating a validator class:有几种类型需要注意: 类型 描述 抽象J8验证器 任何验证器类都应该从这个类继承 J8验证结果 持有错误并有各种返回方法 J8当 由 AbstractJ8Validator 的 from 方法返回。 过滤对象...

    JAVA面试题最全集

    76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...

    Sa-Token:这可能是史上功能最全的Java权限认证框架!目前已集成——登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0、踢人下线、Redis集成、前后台分离、记住我模式、模拟他人账号、临时身份切换、账号封禁、多账号认证体系、注解式鉴权、路由拦截式鉴权、花式token生成、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成..

    在线资料Sa-Token 介绍Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题框架集成简单、开箱即用、API设计清爽,通过Sa...

Global site tag (gtag.js) - Google Analytics