Spring Expression Language не может разрешить метод в классе - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь вычислить некоторое выражение, написанное на SpEL, программно.

ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression(annotation.filter());

SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
context.setVariable("authorities", authentication.getAuthorities());

return expression.getValue(context, Boolean.class);

Как видите, я добавляю переменную, называемую authorities.Я пытаюсь оценить это выражение: #authorities.isEmpty().

Но я получаю исключение:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method isEmpty() cannot be found on type java.util.ArrayList
    at org.springframework.expression.spel.ast.MethodReference.findAccessorForMethod(MethodReference.java:225) ~[spring-expression-5.1.2.RELEASE.jar:5.1.2.RELEASE]
    at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:134) ~[spring-expression-5.1.2.RELEASE.jar:5.1.2.RELEASE]
    ...

Кто-нибудь знает решение этой проблемы?

1 Ответ

0 голосов
/ 12 ноября 2018

SimpleEvaluationContext не допускает произвольного вызова метода. См его Javadocs.

Если вы «доверяете» выражению SpEL, используйте

StandardEvaluationContext context = new StandardEvaluationContext();
...