结合hibernate-validator(除此之外Spring Framework自带的validation,struts validation等),说明Validator框架使用,引入jar包:
<dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency>定义实体类:
Course:
package cn.slimsmart.java.demo.valid; import javax.validation.constraints.NotNull; public class Course { @NotNull(message="课程名不能为空") private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }User:
package cn.slimsmart.java.demo.valid; import javax.validation.Valid; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.Email; public class User { @NotNull(message="姓名不能为空") @Size(min=1,max=4,message="姓名长度介于1和4个字符") private String name; @NotNull(message="年龄不能为空") @Min(value=18,message="年龄不能小于18") @Max(value=70,message="年龄不能大于70") private int age; @Email(message="邮箱地址格式不正确") private String mail; @Pattern(regexp="[男女]",message="性别只能为男或女") private String sex; @Valid //标记course也做校验 private Course course; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } }注解说明:
Bean Validation 中内置的 constraint
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
测试类:
package cn.slimsmart.java.demo.valid; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; public class ValidTest { public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); User user = new User(); user.setAge(12); user.setMail("abcdddd"); user.setName("测试测试测试"); user.setSex("A"); user.setCourse(new Course()); Set<ConstraintViolation<User>> constraintViolations = validator.validate(user); for (ConstraintViolation<User> constraintViolation : constraintViolations) { System.err.println(constraintViolation.getPropertyPath()+":"+constraintViolation.getMessage()); } } }运行输出:
course.name:课程名不能为空 mail:邮箱地址格式不正确 sex:性别只能为男或女 name:姓名长度介于1和4个字符 age:年龄不能小于18