在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 ...
}
分享到:
相关推荐
首先,"hibernate-validator-5.0.0.CR2-dist.zip" 是Hibernate Validator的一个发行版压缩包,其中包含了该版本的所有相关文件。解压这个压缩包,你会看到所需的jar文件,这些文件是实现验证功能的核心组件。通常,...
在这个项目中,我们关注的是`Hibernate-Validator`,它是JSR 303/JSR 349标准的实现,用于提供后台验证功能。`Hibernate-Validator`使得在SSM框架中对用户输入的数据进行校验变得更加方便和规范。 首先,我们需要...
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用于验证对象属性。包含hibernate-validator-4.3.0.Final.jar、jboss-logging-3.1.0.CR2.jar、validation-api-1.0.0.GA.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
hibernate-validator-6.0.14.Final.jar
hibernate-validator 5.3.5.Final jar包 ;desc:if you want validator your project
hibernate3.6 对应的 hibernate-validator-4.1.0
在实际项目中,你可以将`hibernate-validator-5.2.4.Final.jar`添加到类路径中,然后按照规范定义验证规则,从而提高代码质量,减少因数据不合规导致的错误。同时,配合使用相关的工具和框架,如Spring Boot,可以使...
`hibernate-validator-4.1.0.Final-sources.jar`包含了源代码,开发者可以查看源码,深入理解其内部实现机制,对于调试和学习都非常有帮助。 7. **应用实践**: Hibernate Validator常用于Web应用中,配合Spring ...
hibernate-validator.jarhibernate-validator.jarhibernate-validator.jarhibernate-validator.jar
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注解处理器的源代码,版本号为4.3.1.Final,是理解其内部工作原理和自定义验证规则的重要资源。...
hibernate-validator-4.0.0.Beta1.jar
【hibernate-validator-demo】是一个基于Hibernate Validator框架的示例项目,主要针对初学者,旨在帮助他们快速理解和应用数据验证技术。Hibernate Validator是Java Bean Validation规范的实现,它提供了强大的验证...
hibernate-validator-4.3.0.Final。
hibernate-validator-5.4.1.Final-dist.zip hibernate-validator-5.4.1.Final-dist.zip hibernate-validator-5.4.1.Final-dist.zip hibernate-validator-5.4.1.Final-dist.zip