在 java 中验证 MVEL 表达式
Validate MVEL expression in java
用户将输入一些formula/expression。
我想检查 formula/expression 是我函数的字符串输入是否正确(根据 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
以下是代码片段,
public Formula save(String formula)
{
// want to call MVEL api to check if formula/expression is valid or not
...
}
MVEL 是否提供任何 api 接受表达式字符串和 return boolean/throw 表达式不正确时的异常?
您可以使用
验证表达式
Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);
如果无效,这将导致 org.mvel2.CompileException
。
这适用于 mvel 2.2.6,不能保证 API 与旧版本库的兼容性或功能。
另请注意,在您的情况下,这两个表达式都是有效的,因为 MVEL 不知道 duedate
变量的数据类型,只有在 运行 时才知道,当您实际执行表达式。希望这有助于...
用户将输入一些formula/expression。
我想检查 formula/expression 是我函数的字符串输入是否正确(根据 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
以下是代码片段,
public Formula save(String formula)
{
// want to call MVEL api to check if formula/expression is valid or not
...
}
MVEL 是否提供任何 api 接受表达式字符串和 return boolean/throw 表达式不正确时的异常?
您可以使用
验证表达式Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);
如果无效,这将导致 org.mvel2.CompileException
。
这适用于 mvel 2.2.6,不能保证 API 与旧版本库的兼容性或功能。
另请注意,在您的情况下,这两个表达式都是有效的,因为 MVEL 不知道 duedate
变量的数据类型,只有在 运行 时才知道,当您实际执行表达式。希望这有助于...