`

hibernate-validator

阅读更多
在web工程中,对于用户的录入,都是要做校验,有格式的校验,也有逻辑的校验。
举例:
格式的校验:时间格式的校验,数字格式的校验,取值范围的校验
逻辑的校验:结束时间必须大于等于开始时间,结束时间必须大于当前时间

jdk提供了 javax.validation 接口的定义
hibernate-validator 是对其的实现,也是项目中最常用的,例如:Spring mvn 就采用其做为校验框架。

官网为:http://hibernate.org/validator/

pom.xml 引入
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.0.0.GA</version>
		</dependency>
  <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.5.8</version>
       </dependency>

	<dependency>
	    <groupId>org.hibernate</groupId>
	    <artifactId>hibernate-validator</artifactId>
	    <version>4.1.0.Final</version>
	    <exclusions>
	    	<exclusion>
	    		<artifactId>slf4j-api</artifactId>
	    		<groupId>org.slf4j</groupId>
	    	</exclusion>
	    </exclusions>
	</dependency>
	
	<dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-jexl</artifactId>
           <version>2.1.1</version>
     </dependency>



对其中简单使用方式 请参考官网。
在此特举例@ScriptAssert的配置:
要求:
1、身份证可以为空,如果不为空必须为14 或 18 位。
2、年龄要么不填写为0,要么在10 到 100 岁之间
3、身高要么不填写为0,要么在10 到 100 之间。
以上三个要求项目,如果使用普通max 和 min 是无法实现的,要么就要自定义校验器,由于jdk各个注解之间的逻辑是并的关系,所以很难支持

解决方案:jdk 默认支持 js的脚本执行。以及 使用apache的 jexl的表达式。

例如:
@ScriptAssert.List(value = {
		@ScriptAssert(lang = "jexl" ,script = "_this.cid == '' || (_this.cid.length()==14 || _this.cid.length()==18)",message = "用户身份证号格式错误")
		,@ScriptAssert(lang = "jexl" ,script = "_this.age == 0 || (_this.age>=10 && _this.age<=100)",message = "用户年龄错误")
		,@ScriptAssert(lang = "jexl" ,script = "_this.height == 0 || (_this.height>=10 && _this.height<=100)",message = "用户身高错误")
})
public class User {
private String cid;
private int age;
private int height;
  //set get ...
}


测试:
@org.junit.Test
	public void testHibernate() {
		ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
		Validator validator = validatorFactory.getValidator(); 
		User user = new User();
		user.setCid("123456789789456123");
		user.setAge(0);
		user.setHeight(15);
		Set<ConstraintViolation<User>> set = validator.validate(user);
		for(ConstraintViolation<User> item :set){
			System.out.println(item.getMessage());
		}
	}


存在的问题:
对于下面的更复杂的需求,hibernate-validator 是很难甚至无法支持。
因为注解之间的 “并” 关系 导致 逻辑判断的无法灵活有效的中止。

/**
 * 身份证信息
 * @author wangxinchun1988@163.com
 * @date 2013-12-18下午3:53:06
 * 
 * * 1、createDate 可以为空,endDate 也可以为空,如果不为空,那么他们必须是yyyy-MM-dd的时间格式
 *   2、如果endDate不为空,那么endDate的时间必须大于当前时间
 *   3、如果createDate不为空,并且endDate不为空,endDate 必须大于createDate的时间
 *   4、cardID身份证号,为空,或在长度必须为14 或者 18 个字符
 */
public class User{
private String cid;
private Date createDate;
private Date endDate;
// get set ...

}
0
0
分享到:
评论

相关推荐

    hibernate-validator-5.0.0.CR2-dist.zip

    首先,"hibernate-validator-5.0.0.CR2-dist.zip" 是Hibernate Validator的一个发行版压缩包,其中包含了该版本的所有相关文件。解压这个压缩包,你会看到所需的jar文件,这些文件是实现验证功能的核心组件。通常,...

    ssm中hibernate-validator后台注册验证

    在这个项目中,我们关注的是`Hibernate-Validator`,它是JSR 303/JSR 349标准的实现,用于提供后台验证功能。`Hibernate-Validator`使得在SSM框架中对用户输入的数据进行校验变得更加方便和规范。 首先,我们需要...

    Validation3个jia包 validation-api,hibernate-validator

    其次,`hibernate-validator-5.0.1.Final.jar`是Hibernate项目提供的一个Bean Validation实现,它是JSR 303/349规范的一个流行实现。Hibernate Validator提供了更多的自定义注解和更强大的功能,如`@Email`, `@Past`...

    hibernate-validator相关依赖jar包

    hibernate-validator相关依赖jar包,包括jboss-logging-3.1.0.CR2.jar,hibernate-validator-4.3.1.Final.jar,validation-api-1.0.0.GA.jar

    hibernate-validator jar 包

    hibernate-validator用于验证对象属性。包含hibernate-validator-4.3.0.Final.jar、jboss-logging-3.1.0.CR2.jar、validation-api-1.0.0.GA.jar三个包

    后台验证hibernate-validator必须的jar包

    本主题将详细讲解`Hibernate Validator`以及与之相关的`validation-api-2.0.1.Final.jar`、`hibernate-validator-6.0.8.Final.jar`和`jboss-logging-3.3.2.Final.jar`这三个jar包的作用和重要性。 首先,`...

    spring-cloud-starter-gateway下hibernate-validator-5.0.3.Final.jar

    spring-cloud-starter-gateway下的依赖hibernate-validator-5.0.3.Final.jar

    hibernate-validator-6.0.14.Final.jar

    hibernate-validator-6.0.14.Final.jar

    hibernate-validator 5.3.5.Final jar

    hibernate-validator 5.3.5.Final jar包 ;desc:if you want validator your project

    hibernate3.6 对应的 hibernate-validator-4.1.0

    hibernate3.6 对应的 hibernate-validator-4.1.0

    hibernate-validator-5.2.4

    在实际项目中,你可以将`hibernate-validator-5.2.4.Final.jar`添加到类路径中,然后按照规范定义验证规则,从而提高代码质量,减少因数据不合规导致的错误。同时,配合使用相关的工具和框架,如Spring Boot,可以使...

    hibernate-validator-4.1.0.Final.rar

    `hibernate-validator-4.1.0.Final-sources.jar`包含了源代码,开发者可以查看源码,深入理解其内部实现机制,对于调试和学习都非常有帮助。 7. **应用实践**: Hibernate Validator常用于Web应用中,配合Spring ...

    hibernate-validator.jar

    hibernate-validator.jarhibernate-validator.jarhibernate-validator.jarhibernate-validator.jar

    hibernate-validator-6.0.2

    3. `hibernate-validator-cdi-6.0.2.Final.jar`(如果存在):用于与 CDI(Contexts and Dependency Injection)容器集成。 4. `validation-api-2.0.1.Final.jar`:Bean Validation 规范 API,定义了验证接口和注解...

    hibernate-validator-annotation-processor-4.3.1.final-sources.jar.zip

    这个压缩包“hibernate-validator-annotation-processor-4.3.1.final-sources.jar.zip”包含了Hibernate Validator注解处理器的源代码,版本号为4.3.1.Final,是理解其内部工作原理和自定义验证规则的重要资源。...

    hibernate-validator-4.0.0.Beta1.jar

    hibernate-validator-4.0.0.Beta1.jar

    hibernate-validator-demo

    【hibernate-validator-demo】是一个基于Hibernate Validator框架的示例项目,主要针对初学者,旨在帮助他们快速理解和应用数据验证技术。Hibernate Validator是Java Bean Validation规范的实现,它提供了强大的验证...

    hibernate-validator-4

    hibernate-validator-4.3.0.Final。

Global site tag (gtag.js) - Google Analytics