SpEL 解析器在应该返回 true 时返回 false

问题描述 投票:0回答:0

我正在运行下面的一段代码,流量非常少[.025%]~(200 万中的 500)。 SpEL 解析器的行为很奇怪,在应该返回 true 的地方返回 false 响应。

上下文类文件

@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);

对于所有这些失败的实例,在processingModel中分配的值都是“SAMPLE”。并且 parseExpression 这里从未遇到异常或返回结果为 null。因此,确定如何将这些案例从主流中分离出来变得非常困难。

我添加了日志来识别解析器的结果是

false
并且解析器没有异常。如果解析器出现一些错误,我相信它应该抛出异常或最小结果应该是
null

java spring-mvc spring-el spring-expression-language spring-expression
© www.soinside.com 2019 - 2024. All rights reserved.