在java中验证MVEL表达式

在java中验证MVEL表达式,java,mvel,Java,Mvel,用户将输入一些公式/表达式 我想检查作为函数字符串输入的公式/表达式是否正确(根据MVEL标准) 下面是一个有效的表达式 String validFormula = "if(dueDate > "2015-12-12") {a*b} else {a+b}"; String invalidFormula = "if(dueDate > 2015-12-12) {a*b} else {a+b}"; //Quotes are missing for date 下面是不正确的表达 St

用户将输入一些公式/表达式

我想检查作为函数字符串输入的公式/表达式是否正确(根据MVEL标准)

下面是一个有效的表达式

String validFormula = "if(dueDate > "2015-12-12") {a*b} else {a+b}";
String invalidFormula = "if(dueDate > 2015-12-12) {a*b} else {a+b}";
 //Quotes are missing for date
下面是不正确的表达

String validFormula = "if(dueDate > "2015-12-12") {a*b} else {a+b}";
String invalidFormula = "if(dueDate > 2015-12-12) {a*b} else {a+b}";
 //Quotes are missing for date
下面是代码片段

public Formula save(String formula)
{
    // want to call MVEL api to check if formula/expression is valid or not
    ...
}

MVEL提供的api是否接受表达式字符串并在表达式不正确时返回布尔值/抛出异常?

您可以使用

Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);
如果无效,则会导致
org.mvel2.CompileException

这适用于MVEL2.2.6,不能保证API兼容性或与旧版本库的功能


另外请注意,在您的情况下,这两个表达式都是有效的,因为MVEL不知道
duedate
变量的数据类型,只有在实际执行表达式时,才知道该变量的数据类型。希望这有帮助…

您可以使用

Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);
如果无效,则会导致
org.mvel2.CompileException

这适用于MVEL2.2.6,不能保证API兼容性或与旧版本库的功能


另外请注意,在您的情况下,这两个表达式都是有效的,因为MVEL不知道
duedate
变量的数据类型,只有在实际执行表达式时,才知道该变量的数据类型。希望这有助于…

如果您使用MVEL计算不正确的表达式,它将只引发异常。我正在尝试保存表达式。计算在不同的事务中进行。我想确保当用户保存应该验证的表达式时。如果您使用MVEL计算不正确的表达式,它只会引发异常。在这里,我尝试只保存表达式。计算发生在不同的事务中。我想确保当用户保存应该验证的表达式时。