package com.iailab.framework.common.validation; import cn.hutool.core.collection.CollUtil; import com.iailab.framework.common.core.IntArrayValuable; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class InEnumCollectionValidator implements ConstraintValidator> { private List values; @Override public void initialize(InEnum annotation) { IntArrayValuable[] values = annotation.value().getEnumConstants(); if (values.length == 0) { this.values = Collections.emptyList(); } else { this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList()); } } @Override public boolean isValid(Collection list, ConstraintValidatorContext context) { // 校验通过 if (CollUtil.containsAll(values, list)) { return true; } // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() .replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句 return false; } }