Как определить, что SpelExpressionParser не нашел переменную в контексте - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть простой вопрос, но я ничего не нашел в сети.

Вот пример:

SpelExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable("variable", "value");

Expression expression = parser.parseExpression("variable + temp");
expression.getValue(ctx); // returns "valuenull"

Мне просто нужно знать, какая часть выражения могла быне быть решенным.(В данном случае "temp")

Что-то вроде:

List<String> variables = expression.getNotResolvedVariables(ctx);

1 Ответ

0 голосов
/ 03 февраля 2019

Прежде всего, ваш фрагмент выдает исключение, когда я его запускаю (не valuenull Я думаю, что вы имели в виду #variable + #temp в качестве выражения. В противном случае выдается исключение:

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'variable' cannot be found on null

Asна ваш главный вопрос ...

  • в Expression нет такого метода для извлечения всех переменных или в контексте для извлечения всех неразрешенных переменных для данного выражения, но ...
  • Вы можете посетить представление объекта (AST) выражения Spring с помощью метода getAST () в SpelExpression и собрать все VariableReference
  • , а затем сравнить набор всех переменных ссылок.к определенному в вашем текущем контексте
...