我正在运行下面的一段代码,流量非常少[.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