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类型的添加了
参考
最新评论
命令: nload
真是个良心站点哇,大公无私,爱了爱了
还可以直接搞一张映射表,存 uid | time | source_index, 第一次直接查对应的 time 选出前100, 第二次直接用 CompleteFuture 去分别用 source_in
干得漂亮,多个朋友堵条路
2021.2.2版本的不适用吧
现在还可以用么
激活码有用,感谢分享
激活码的地址打不开了