最近,前辈们在项目中使用了Bean Validation,于是在晚上找些资料学习一下,
这是通过注解的方式对数据进行一系列的验证,还是比较好理解的。
package org.ygy.demo.validator; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import lombok.Data; @Data public class UserEntity implements java.io.Serializable { private static final long serialVersionUID = -5673164765453841780L; @NotNull(message = "ID不能为空!") private Integer id; @NotNull(message = "姓名不能为空!") @Size(min = 2, max = 10, message = "姓名为2-10个字符") private String name; @NotNull(message = "密码不能为空!") @Min(value = 2 , message = "秘密最少2个字符") private String password; }
package org.ygy.demo.validator; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.junit.Test; public class ValidatorTest { @Test public void testUserEntity() { UserEntity user = new UserEntity(); user.setId(100); user.setName("a"); user.setPassword("s"); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<UserEntity>> validations = validator.validate(user); for(ConstraintViolation<UserEntity> each : validations) { System.out.println(each.getRootBean()); System.out.println(each.getRootBeanClass()); System.out.println(each.getLeafBean()); System.out.println(each.getPropertyPath()); System.out.println(each.getMessage()); System.out.println(each.getInvalidValue()); } } }
这是Java EE 中的接口规范,Hibernate有自己的实现,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.ygy.demo</groupId> <artifactId>validator</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>validator</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>0.12.0</version> </dependency> <!-- <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> </dependency> --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.1.0.CR1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> </dependencies> </project>
这里还有一篇IBM的文章介绍Bean Validation
http://www.ibm.com/developerworks/cn/java/j-lo-beanvalid/
还有一篇也记下:
http://my.oschina.net/zhaoqian/blog/118458