结合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