spring validation相关知识就不阐述,以下链接有详细阐述
本文主要写关于validation自定义校验
项目有个需求:实体类的某个属性 必须验证为指定值,比如0,1等
做法有2种:
1,使用validation @Pattern注解的正则表达式,本文主要讲自定义校验,在此就不多写。
2,自定义注解
一,第一步,创建自定义注解
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {EnumValueValidator.class})
public @interface EnumValue {
//默认错误消息
String message() default "必须为指定值";
String[] strValues() default {};
int[] intValues() default {};
//分组
Class<?>[] groups() default {};
//负载
Class<? extends Payload>[] payload() default {};
//指定多个时使用
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface List {
EnumValue[] value();
}
}
strValues()和intValues()用于存注解上指定的值,
@Constraint注解上指定了EnumValueValidator类为具体实现类,
二,创建具体实现类EnumValueValidator,
public class EnumValueValidator implements ConstraintValidator< EnumValue, Object>{
private String[] strValues;
private int[] intValues;
@Override
public void initialize(EnumValue constraintAnnotation) {
strValues = constraintAnnotation.strValues();
intValues = constraintAnnotation.intValues();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context ) {
if(value instanceof String) {
for (String s:strValues) {
if(s.equals(value)){
return true;
}
}
}else if(value instanceof Integer){
for (int s:intValues) {
if(s == value.intValue()){
return true;
}
}
}
return false;
}
}
必须实现ConstraintValidator类,有2个方法initialize,isValid,
通过initialize方法获取注解上的值,通过isValid方法实现具体的验证,
isVali有2个入参Object value, ConstraintValidatorContext context,Object 为需要被验证的值。
编写完成后,自定义注解@EnumValue就可以在String和Integer类型的添加了
参考
最新评论
下载的激活包里面没有激活码呢
6666,找了半天终于找到可用的了,点赞
怎么保证这个签名不会乱呢,签名也是数据的一部分
public static void main(String[] args) { List list = Arrays.asList("A","B","C","D");
rangeClosed,是左闭右闭
守护线程 是低优先级线程。其唯一作用是为用户线程提供服务。
不简单,不简单
1.4 可以嘛?