`
wenjinglian
  • 浏览: 817911 次
  • 性别: 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的后台验证框架设计思路及其应用场景,旨在为开发者提供一种高效、可扩展且易于使用的验证方案。 #### 二、应用场景 在实际开发过程中,特别是在action或facade层,我们需要实现统一的...

    Java对象验证框架 OVal.7z

    总的来说,OVal是一个强大的Java验证框架,通过提供声明式的验证规则和灵活的验证器机制,使得开发者能够有效地确保程序中数据的正确性。了解并掌握OVal的使用,可以帮助我们编写出更健壮、更具防御性的代码,减少因...

    基于Java的对象验证框架 OVal.zip

    OVal框架由德国软件公司Xceptance开发,旨在为Java开发者提供一种方便、灵活的方式来验证对象属性是否满足预设的约束条件。这些约束可以包括基本的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑验证。 ...

    基于java的对象验证框架 OVal.zip

    Java对象验证框架OVal是一个强大的工具,用于在Java应用程序中执行对象级别的验证。它提供了一种声明性的方式来定义验证规则,使得代码更加清晰、可维护,并减少了错误的可能性。OVal框架的核心理念是将验证逻辑与...

    java web开发框架

    首先,Java Web开发框架通常包含以下几个关键组成部分: 1. **模型(Model)**:模型是业务逻辑的载体,负责处理数据和业务规则。在Java Web开发中,这通常通过JavaBeans或Entity类来实现,它们封装了数据库操作和...

    30种java技术框架图

    ### Java技术框架图知识点概述 ...以上是对“30种java技术框架图”中所涵盖的主要知识点的详细介绍。这些框架和技术涵盖了从底层基础设施到高层应用的各个层面,对于深入理解和掌握 Java 生态系统具有重要意义。

    JAVA各种系统框架图简介

    本文将对几种常见的Java系统框架进行简要介绍,帮助开发者更好地理解和选择适用的技术栈。 1. **Spring框架** Spring是企业级Java应用的事实标准,它是一个全面的开发框架,支持依赖注入(DI)、面向切面编程(AOP...

    Java Application Service Java 应用服务框架

    Java Application Service,通常简称为Java应用服务框架,是Java开发者用于构建可扩展、模块化且易于维护的企业级应用程序的一种常用工具。它提供了一种结构化的框架,帮助开发人员快速搭建和部署应用程序,同时确保...

    java 框架论坛系统

    Java框架论坛系统是一种基于Java技术实现的在线讨论平台,它主要利用了Struts框架进行构建。Struts是Apache软件基金会下的一个开源项目,是MVC(Model-View-Controller)设计模式的一种实现,广泛应用于Java Web开发...

    java高级面试框架整理

    ### Java高级面试框架知识点整理 #### Struts框架详解 **1. Struts框架的基本结构**...以上是针对Struts、Hibernate、AOP和Spring这几个Java框架的一些关键知识点的总结,希望能够帮助读者更好地理解和掌握这些技术。

    使用json-lib将java对象转换成json字符串

    - 在实际开发中,为了保证代码的可读性和可维护性,建议在转换前先对Java对象进行数据校验。 - 使用Gson或Jackson等更现代的库,它们提供了更强大和灵活的JSON处理功能,性能也更好。 - 对于大型项目,考虑使用...

    Java框架 布局 聊天室

    在IT行业中,Java框架是开发高效、可维护的软件应用的重要工具。本项目涉及的是一个基于Java框架构建的简单聊天室,重点在于理解和运用各种布局管理器来优化用户界面的展示。下面将深入探讨Java框架、布局管理和聊天...

    JAVA面向对象程序设计(期末考试试题及答案).zip

    在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起,以实现代码的模块化和可重用性。这个压缩包文件"JAVA面向...

    基于校验器链的简单实现,支持对象按照属性来自定义校验,可以重用校验器。

    通过这样的设计,我们可以构建出一个强大且可扩展的数据校验框架。它不仅可以应用于简单的对象校验,还可以扩展到复杂业务场景,如表单验证、数据库操作前的数据检查等。 总的来说,基于校验器链的实现为Java开发者...

    JAVA-CS快速开发框架设计文档

    【JAVA-CS快速开发框架设计文档】是一份详细指导JAVA开发者在无IDE环境下构建高效开发框架的资料,旨在帮助程序员在不依赖特定集成开发环境的情况下,实现界面设计与事件代码的动态开发。这份文档可能涵盖了从基础...

    java常用框架学习笔记

    ### Java常用框架学习笔记 #### Hibernate ##### 1.1 Hibernate 实现数据库操作步骤 - **导入所需的Jar包**...以上内容概述了Java开发中常用的几个框架的基本概念和使用方法,对于初学者来说是非常有用的参考资料。

    Java游戏服务器框架.zip

    在游戏开发领域,Java作为一种高效、跨平台的语言,被广泛应用于游戏服务器的构建。本资料“Java游戏服务器框架.zip”包含了一套完整的Java游戏服务器框架,适合于初学者和有经验的开发者进行游戏开发的学习与实践。...

    java框架基础

    在这个“java框架基础”的主题中,我们将主要探讨几个流行的Java Web框架,如Spring、Struts和MyBatis,以及它们在实际项目中的应用。 首先,Spring框架是Java企业级应用开发的核心框架。它提供了全面的基础设施...

    结合几种著名框架使应用达到松耦合

    本文将探讨如何结合几种著名的Java框架——Struts、Spring和Hibernate,来实现应用的松耦合。 Struts作为表示层框架,主要负责管理用户的请求并作出响应。它提供了一个Controller,用于调度业务逻辑和视图处理,...

Global site tag (gtag.js) - Google Analytics