自定义校验器: 可以参考原有的定义情况去书写@NotNull
需求:定义一个注解只能输入0,1
- 定义注解
- 定义校验器
- 绑定校验器和注解
- 定义提示信息
- 使用
1. 定义注解
ListValueConstraintValidator :为校验器,下面会专门书写
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Constraint(validatedBy = { ListValueConstraintValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListValue {
String message() default "{com.xx.ListValue.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int[] vals() default { };
}
2. 定义校验器
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
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 value 需要校验的值
* @param context
* @return
*/
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return set.contains(value);
}
}
注意: ConstraintValidator<ListValue,Integer>中
ListValue为注解;Integer为类型
3. 绑定校验器和注解
@Constraint(validatedBy = { ListValueConstraintValidator.class })
4. 定义提示信息
早resources下面定义提示信息ValidationMessages.properties
com.xx.ListValue.message=必须提交指定的值
5. 使用
在entitiy中
@ListValue(vals = {0,1})
@NotNull
private Integer showStatus;