6.5.14. Оператор Элвиса
Я наблюдаю некоторое странное поведение с использованием оператора elvis в SpEL. Если я не заключаю выражение elvis в скобки "()", то возвращается результат оператора elvis, а остальная часть выражения игнорируется. Пример кода, показывающий поведение ниже:
HashMap<String, String> facts = new HashMap<String, String>();
facts.put("flag", "flagvalue");
String expressionString;
Expression expression;
Object expressionResult;
expressionString = "[flag]?:'' matches '(?i)flagvalue'";
expression = new SpelExpressionParser().parseExpression(expressionString);
expressionResult = expression.getValue(facts);
System.out.println("Unexpected Result:" + expressionResult);
expressionString = "([flag]?:'') matches '(?i)flagvalue'";
expression = new SpelExpressionParser().parseExpression(expressionString);
expressionResult = expression.getValue(facts);
System.out.println("Expected Result:" + expressionResult);
Выход:
Unexpected Result:flagvalue
Expected Result:true
Странная часть - когда значение отсутствует в хэш-карте (т. Е. Комментарий в строке facts.put), оператор elvis работает нормально, и оба выражения возвращают false, как и ожидалось.
(с использованием spring-framework-3.0.5)