|
@@ -0,0 +1,42 @@
|
|
|
|
+package cn.iocoder.yudao.framework.common.validation;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.iocoder.yudao.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<InEnum, Collection<Integer>> {
|
|
|
|
+
|
|
|
|
+ private List<Integer> 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<Integer> 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;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|