要检验的学生对象(省去了set和get方法)
public class Student {
/**
* 学生姓名
*/
private String name;
/**
* 性别:只能为男或女,限制在一个枚举列表之中
*/
@Enums(value ={ "男","女"} ,message = "参数不在合理值范围内")
private String sex;
/**
* 课程成绩
*/
@Valid
private CourseGrade courseGrade;
}
要校验的学生课程成绩
public class CourseGrade {
private String course;
@Min(value = 0,message = "成绩不能为负值")
private double grade;
}
自定义的一个注解
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidateParams.class)
@Documented
public @interface Enums {
String message() default "参数不合法";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] value();
}
自定义的校验类
public class ValidateParams implements ConstraintValidator<Enums, String> {
/**
* 参数校验给定的参数值范围
*/
private String[] value;
@Override
public void initialize(Enums enums) {
value = enums.value();
}
/**
* 校验方法(可根据自己的需要进行不同的判断)
*
* @param s 请求参数的实际传值
* @param constraintValidatorContext constraintValidatorContext
* @return boolean
*/
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if(StringUtils.isEmpty(s)){
return true;
}
for (String string:value){
if (string.equals(s)){
return true;
}
}
return false;
}
}
hibernate validate校验类
public class HibernateValidatorUtil {
private static Validator validator = Validation.byProvider(HibernateValidator.class)
.configure().failFast(true).buildValidatorFactory().getValidator();
public static <T> void validate(T obj) {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
if (!constraintViolations.isEmpty()) {
System.err.println(constraintViolations.iterator().next().getMessage());
}
}
}
编写测试类Test
public class Test {
public static void main(String[] args) {
Student student=new Student();
student.setSex("we");
HibernateValidatorUtil.validate(student);
}
}
public class Test {
public static void main(String[] args) {
Student student=new Student();
student.setSex("男");
CourseGrade courseGrade=new CourseGrade();
courseGrade.setGrade(0);
student.setCourseGrade(courseGrade);
HibernateValidatorUtil.validate(student);
}
}
补充说明
1.@Target:作用域,该注解要执行的地方
2.@Retention:作用时间
3.@Constraint(validatedBy = ValidateParams.class):对应自己要定义的校验类 ValidateParams
4.如果要校验学生的课程成绩,需要在CourseGrade 对象上加@Valid注解,这样里面的校验才会生效,当CourseGrade为空时里面的校验也不会生效
5.需要用到的依赖之一
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
若有表述错误的地方,还请指正。