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注解!
标签:validValues,return,String,自定义,value,注解,ValidValueList From: https://www.cnblogs.com/xiaogh/p/17711860.html