自定义注解@ValidValueList
1、自定义注解 @ValidValueList 和验证器 ValidValueListValidator 来确保集合中的元素必须是在指定的值列表中。
2、注解 @ValidValueList 允许你在字段或参数上标记一个集合,并为其提供一组有效的值。验证器 ValidValueListValidator 则用于检查集合中的元素是否都在指定的值列表中。
代码实现:
@Target({FIELD, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ValidValueListValidator.class)
public @interface ValidValueList {
String[] value() default { };
String message() default "invalid value";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
验证器类:
public class ValidValueListValidator implements ConstraintValidator<ValidValueList, Collection<String>> {
private String[] validValues;
@Override
public void initialize(ValidValueList constraintAnnotation) {
validValues = constraintAnnotation.value();
}
@Override
public boolean isValid(Collection<String> value, ConstraintValidatorContext context) {
//允许空集合
if (value == null){
return true;
}
//使用Stream遍历集合中的每个元素,验证是否在允许的参数值列表中
boolean allValid = value.stream().allMatch(item -> item != null && containsIgnoreCase(item, validValues));
return allValid;
}
private boolean containsIgnoreCase(String value, String[] validValues) {
//检查是否包含在允许的参数值列表中
for (String validValue : validValues){
if (validValue.equals(value)){
return true;
}
}
return false;
}
}
示例:
@ValidValueList(message = "输入参数不在值列表中", value = {"MAX", "MIN", "FIRST", "LATEST"})
private List<String> reportInfo;
注意:需要在Controller加上@Valid注解!多层对象嵌套也需要逐层添加@Valid注解!

浙公网安备 33010602011771号