JSR 303学习 自定义校验(完结)
1 编写自定义的校验注解
参考已有的 校验注解
加依赖
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency>
编写自定义校验注解
package com.atguigu.common.valid; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Documented //指定校验器 @Constraint( validatedBy = {} ) //校验注解可以标注在哪些位置 @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) //可以在运行时获取到 @Retention(RetentionPolicy.RUNTIME) public @interface ListValue { String message() default "{com.atguigu.common.valid.ListValue.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; int [] vals() default { }; }
写入message信息
实体类上加上 自定义注解
2 编写自定义的校验器
package com.atguigu.common.valid; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> { private Set<Integer> set=new HashSet<>(); //初始化方式 获取初始化 传入的校验规则的值 @Override public void initialize(ListValue constraintAnnotation) { int[] vals= constraintAnnotation.vals(); for (int val: vals) { set.add(val); } } /** * 判断是否校验成功 * @param integer 前端给我们传入的值 * @param constraintValidatorContext * @return */ @Override public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) { return set.contains(integer); } }
注意点
3 关联自定义校验器 和 校验注解
4 测试
如果在注解里写入 message 信息 注解里的message 信息出的优先级 大于ValidationMessages.properties 里的