Selaa lähdekoodia

添加 validator 模块

reghao 2 vuotta sitten
vanhempi
commit
13de4d4ae4

+ 1 - 0
pom.xml

@@ -12,6 +12,7 @@
         <module>jdk</module>
         <module>tool</module>
         <module>web</module>
+        <module>validator</module>
         <module>media</module>
     </modules>
 

+ 39 - 0
validator/pom.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>jutil</artifactId>
+        <groupId>cn.reghao.jutil</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>validator</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.reghao.jutil</groupId>
+            <artifactId>jdk</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <version>2.0.1.Final</version>
+        </dependency>
+    </dependencies>
+
+    <distributionManagement>
+        <repository>
+            <id>maven-local-hosted</id>
+            <url>http://nexus.reghao.cn/repository/maven-local-hosted/</url>
+        </repository>
+    </distributionManagement>
+</project>

+ 50 - 0
validator/src/main/java/cn/reghao/jutil/validator/EnumValidator.java

@@ -0,0 +1,50 @@
+package cn.reghao.jutil.validator;
+
+import cn.reghao.jutil.jdk.clazz.ClassUtil;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-08-10 10:59:34
+ */
+public class EnumValidator implements ConstraintValidator<ValidEnum, Object> {
+    private final List<Object> values = new ArrayList();
+
+    public EnumValidator() {
+    }
+
+    public void initialize(ValidEnum constraintAnnotation) {
+        Class<?> enumClazz = constraintAnnotation.value();
+        Object[] enumConstants = enumClazz.getEnumConstants();
+        if (enumConstants != null) {
+            Method method = ClassUtil.findMethod(enumClazz, constraintAnnotation.method(), new Class[0]);
+            if (method == null) {
+                System.out.printf("枚举对象:[%s]中不存在方法:[%s],请检查.\n", enumClazz.getName(), constraintAnnotation.method());
+            } else {
+                method.setAccessible(true);
+
+                try {
+                    Object[] var5 = enumConstants;
+                    int var6 = enumConstants.length;
+
+                    for(int var7 = 0; var7 < var6; ++var7) {
+                        Object enumConstant = var5[var7];
+                        this.values.add(method.invoke(enumConstant));
+                    }
+                } catch (Exception var9) {
+                    System.out.printf("获取枚举类:[%s]的枚举对象的值失败.\n", enumClazz);
+                }
+
+            }
+        }
+    }
+
+    public boolean isValid(Object value, ConstraintValidatorContext context) {
+        return value == null || this.values.contains(value);
+    }
+}

+ 27 - 0
validator/src/main/java/cn/reghao/jutil/validator/ValidEnum.java

@@ -0,0 +1,27 @@
+package cn.reghao.jutil.validator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+/**
+ * @author reghao
+ * @date 2023-08-10 10:59:20
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD})
+@Constraint(
+        validatedBy = {EnumValidator.class}
+)
+public @interface ValidEnum {
+    Class<?> value();
+
+    String message() default "枚举类型的值不正确";
+
+    String method() default "getValue";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+}