From 387c231d1fc4fddf288983f49b96a12294062673 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Wed, 17 Jul 2019 08:51:44 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0StringList=20SpEL=20,=E6=9C=AA?= =?utf8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/annotation/StringList.java | 4 ++- .../api/validator/StringListValidator.java | 31 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) 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!"); + } } } -- 2.17.1