当我尝试评估布尔表达式,其中包含具有空值的变量或评估未定义的变量时,解析器不能用作我预料到,它不会失败,而是假设空变量(或未定义的变量)为大负数(我猜......)。
这里我编写的Test类显示了这个:
public class SpELTest {
@Test(expected = Exception.class)
public void evaluateNullVariable() {
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("PERFORMANCE", null);
Boolean result = (Boolean)parser.parseExpression("#PERFORMANCE < 100").getValue(context);
assertTrue(result); // no expected result
}
@Test(expected = Exception.class)
public void evaluateUndefinedVariable() {
ExpressionParser parser = new SpelExpressionParser();
Boolean result = (Boolean)parser.parseExpression("#UNDEFINED < 100").getValue();
assertTrue(result); // no expected result
}
}
对这种行为的任何想法或如何避免它?
答案 0 :(得分:1)
"#PERFORMANCE == null ? false : #PERFORMANCE < 100"