自定义一个注解判断提交的值是否为指定值
1、定义一个注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* @author liulala
*/
@Documented
@Constraint(
validatedBy = {listValueConstraintValidator.class}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListValue {
String message() default "只能在指定名称中选择";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
string[] names() default {};
}
2、自定义校验器
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;
/**
* 自定义校验器,继承ConstraintValidator,ListValue为定义的注解名称,String为该注解判断类型
*/
public class listValueConstraintValidator implements ConstraintValidator<ListValue,String> {
private Set<String> set = new HashSet<>();
//初始化方法,将可以选择的值取出来放到set中
@Override
public void initialize(ListValue constraintAnnotation) {
String[] names= constraintAnnotation.names();
for(String name:names)
{
set.add(val);
}
}
/**
*
* @param value 需要校验的值
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String name, ConstraintValidatorContext constraintValidatorContext) {
return set.contains(name);
}
}
3、将自定义的注解放在需要属性上
@ListValue(names={"腾讯","360"})
private String companyName;