01-spring之自定义注解

要检验的学生对象(省去了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>

若有表述错误的地方,还请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值