早上好。
我需要通过 java 运行 javascript 语法验证,但我正在努力寻找最佳解决方案。
我使用以下方法对 Nashorn 进行了一些测试:
try
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Object retVal = engine.eval("findFieldValue(field);");
}
catch (ScriptException e)
{
response.put("status", "parseexception");
response.put("msg", e.getMessage());
}
Nashorn 抛出异常,指出 findFieldValue 和 field 均未定义,这是正确的。 我不需要这种验证。我需要的只是验证语法,就像 Esprima JS API 所做的那样
http://esprima.org/demo/validate.html
我的问题是。我可以使用 Nashorn 忽略语义验证,仅验证语法吗?
谢谢!
最佳答案
您正在使用eval()
正如您可能猜到的那样,它尝试评估表达式。
NashornScriptEngine
实现javax.script.Compilable
所以它提供了 compile()
方法。要使用它,您必须转换 engine
至NashornScriptEngine
,如
NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
您会得到 ScriptException
如果编译失败。
关于java - 使用 Java Nashorn 引擎仅验证 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51677545/