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
@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!");
+ }
}
}