java - 在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

以下是代码片段,

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

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

最佳答案

您可以使用

验证表达式
Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);

如果无效,这将导致 org.mvel2.CompileException

这适用于 mvel 2.2.6,不能保证 API 兼容性或与旧版本库的功能。

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

关于java - 在java中验证MVEL表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222209/

相关文章:

java - CloudFoundry Grails-无法检测Java编译器,请确保您使用的是JDK而不是JRE

java - 为警告创建 Java 注释 - @NonOptimal

elasticsearch - 嵌套的Mvel脚本更新

java - Drools:mvel 和 java 方言之间的差异

java - 在 Java 运行时评估基于 Json 的规则

java - 如何在 MVEL 表达式中使用 substring 字符串函数

java - 模拟框架对我有什么用?

c# - Java 为 C# 表达式提供了哪些替代方案?

elasticsearch - 计算多值字段位置的距离

java - 如何管理多个微服务中的安全上下文