SpEL Parser возвращает false, хотя он должен возвращать true
Я работаю ниже фрагмента кода в реальном времени и с очень небольшим трафиком [0,025%] ~(500 из 2 миллионов). Парсер SpEL ведет себя странно и возвращает ответ как ложь там, где он должен возвращать истину.
Файл контекстного класса
@Getter
@Builder
@ToString
public class EvaluationContext {
private String requestKey;
private String namespace;
private ContextAmount totalAmount;
private double threshold;
private String processingModel;
private String channel;
}
Файл правил
@Getter
@Setter
@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
public class PolicyEvaluationRule {
private String namespace;
private String ruleName = "test1";
private String expression = "'SAMPLE'.equals(Context?.ProcessingModel)";
private EvaluationContext context;
}
Оценка правила SPEL, как показано ниже.
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext(rule);
Boolean result = parser.parseExpression(rule.getExpression()).getValue(context, Boolean.class);
Для всех этих неудачных экземпляров в модели обработки было присвоено значение «SAMPLE». И parseExpression здесь никогда не сталкивался с исключением и не возвращал нулевой результат. Таким образом, становится действительно сложно определить, как отделить эти дела от основного потока.
Я добавил журналы, чтобы определить, что результат анализатора былfalse
и не было никаких исключений из парсера. Если в парсере возникла какая-то ошибка, я считаю, что он должен выдать исключение или минимум, результат должен был бытьnull