自定义注解@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注解!

posted @   xiaogh  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示