diff --git a/pom.xml b/pom.xml
index f04a10f..9c9988e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,19 +12,14 @@
21
21
UTF-8
- 5.2.1.RELEASE
5.8.26
0.9.10
2.0.1.Final
+ 3.2.1
-
- org.springframework
- spring-context
- ${springContext.version}
-
cn.hutool
hutool-all
@@ -40,6 +35,10 @@
validation-api
${validation.version}
-
+
+ org.apache.commons
+ commons-jexl3
+ ${jexl.version}
+
\ No newline at end of file
diff --git a/src/main/java/com/hua/test/valid/Student.java b/src/main/java/com/hua/test/valid/Student.java
index 62e5a1d..90bd4bd 100644
--- a/src/main/java/com/hua/test/valid/Student.java
+++ b/src/main/java/com/hua/test/valid/Student.java
@@ -8,7 +8,7 @@ import com.hua.valid.annotation.ConditionNotNull;
*/
public class Student {
- @ConditionNotNull(test = "teaName == '王老师' and teaAge == 28 and teaSex == 1", message = "老师名字为王老师,年龄为18,性别为1的时候 name不能为null")
+ @ConditionNotNull(expression = "teaName == '王老师' and teaAge == 28 and teaSex == 1", message = "老师名字为王老师,年龄为18,性别为1的时候 name不能为null")
private String name;
private int age;
diff --git a/src/main/java/com/hua/valid/ConditionNotNullHandler.java b/src/main/java/com/hua/valid/ConditionNotNullHandler.java
index 4f8e2f9..5c96db4 100644
--- a/src/main/java/com/hua/valid/ConditionNotNullHandler.java
+++ b/src/main/java/com/hua/valid/ConditionNotNullHandler.java
@@ -1,10 +1,13 @@
package com.hua.valid;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.expression.ExpressionUtil;
import com.hua.annotation.Handles;
import com.hua.valid.annotation.ConditionNotNull;
-import org.springframework.expression.ExpressionParser;
-import org.springframework.expression.spel.standard.SpelExpressionParser;
+
+import java.util.Map;
/**
* @author Hua
@@ -15,13 +18,26 @@ public class ConditionNotNullHandler implements AnnotationHandler {
@Override
public boolean handle(HandleDTO handleDTO) {
ConditionNotNull conditionValidate = (ConditionNotNull) handleDTO.getCurrentAnnotation();
- String test = conditionValidate.test();
- if (StrUtil.isEmpty(test)) {
+ String expression = conditionValidate.expression();
+ if (StrUtil.isEmpty(expression)) {
return true;
}
- ExpressionParser parser = new SpelExpressionParser();
+ if (handleDTO.getField() == null) {
+ return true;
+ }
+ Dict context = new Dict();
- Boolean value = parser.parseExpression(test).getValue(handleDTO.getOriginObj(), Boolean.class);
+ Map fieldMap = BeanUtil.beanToMap(handleDTO.getOriginObj(), false, true);
+ context.putAll(fieldMap);
+
+ try {
+ Object fieldValue = BeanUtil.getFieldValue(handleDTO.getOriginObj(), handleDTO.getField().getName());
+ context.set(handleDTO.getField().getName(), fieldValue);
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to access field value", e);
+ }
+
+ Boolean value = (Boolean) ExpressionUtil.eval(expression, context);
if (Boolean.TRUE.equals(value) && handleDTO.getFieldValue() == null) {
handleDTO.getErrorMessage().addErrorObj(conditionValidate.message(), handleDTO.getField());
return false;
diff --git a/src/main/java/com/hua/valid/annotation/ConditionNotNull.java b/src/main/java/com/hua/valid/annotation/ConditionNotNull.java
index 7be7d09..23201d5 100644
--- a/src/main/java/com/hua/valid/annotation/ConditionNotNull.java
+++ b/src/main/java/com/hua/valid/annotation/ConditionNotNull.java
@@ -10,7 +10,7 @@ import java.lang.annotation.*;
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ConditionNotNull {
- String test() default "";
+ String expression() default "";
String message() default "";
}
diff --git a/src/main/java/com/hua/valid/annotation/PackageScanConfig.java b/src/main/java/com/hua/valid/annotation/PackageScanConfig.java
index a5499a2..2716620 100644
--- a/src/main/java/com/hua/valid/annotation/PackageScanConfig.java
+++ b/src/main/java/com/hua/valid/annotation/PackageScanConfig.java
@@ -8,7 +8,7 @@ import java.lang.annotation.Target;
@Target(ElementType.TYPE) // 类或接口上使用
@Retention(RetentionPolicy.RUNTIME) // 在运行时可见
public @interface PackageScanConfig {
- boolean useSPI() default false; // 默认为空数组
- boolean useReflection() default false; // 默认为空数组
+ boolean useSPI() default false; // 默认为false
+ boolean useReflection() default false; // 默认为false
String[] packages() default {}; // 默认为空数组
}