From: Tang Cheng Date: Wed, 17 Jul 2019 00:51:44 +0000 (+0800) Subject: 增加StringList SpEL ,未测试 X-Git-Tag: 1.0.0^2~37 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=387c231d1fc4fddf288983f49b96a12294062673;p=epayment%2Ffood_payapi.git 增加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 2c608dfc..9b58839c 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 @@ public @interface StringList { Class[] 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 63f6299c..b4300b54 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 { - private String[] valueList; @Override @@ -19,6 +21,31 @@ public class StringListValidator implements ConstraintValidator 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!"); + } } }