增加StringList SpEL ,未测试
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java
index 2c608df..9b58839 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/annotation/StringList.java
@@ -17,5 +17,7 @@
Class<? extends Payload>[] payload() default {};
- String[] value();
+ String[] value() default {};
+
+ String expr() default "";
}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java
index 63f6299..b4300b5 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/StringListValidator.java
@@ -1,13 +1,15 @@
package com.supwisdom.dlpay.api.validator;
import com.supwisdom.dlpay.api.annotation.StringList;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
public class StringListValidator implements ConstraintValidator<StringList, String> {
-
private String[] valueList;
@Override
@@ -19,6 +21,31 @@
@Override
public void initialize(StringList constraintAnnotation) {
- valueList = constraintAnnotation.value();
+ if (constraintAnnotation.value().length > 0) {
+ valueList = constraintAnnotation.value();
+ } else if (!constraintAnnotation.expr().isEmpty()) {
+ parseExpress(constraintAnnotation.expr());
+ } else {
+ throw new IllegalArgumentException("StringList validator must has `value` or `expr` property");
+ }
+ }
+
+ private void parseExpress(String expr) {
+ ExpressionParser expressionParser = new SpelExpressionParser();
+ Expression expression = expressionParser.parseExpression(expr);
+ Object value = expression.getValue();
+ if (value instanceof String) {
+ valueList = new String[]{(String) value};
+ } else if (value instanceof String[]) {
+ valueList = (String[]) value;
+ } else if (value instanceof Object[]) {
+ valueList = new String[((Object[]) value).length];
+ Object[] realValue = (Object[]) value;
+ for (int i = 0; i < realValue.length; ++i) {
+ valueList[i] = realValue[i].toString();
+ }
+ } else {
+ throw new IllegalArgumentException("parse expr error!");
+ }
}
}