将java.object解析为ScriptEngine时出现脚本异常

将java.object解析为ScriptEngine时出现脚本异常,java,json,Java,Json,我试图做的是通过java代码在浏览器地址栏中解析json对象。我想要获得的JSON对象应该是: {idUtente : "idUtente"} 所以我实现了这个代码 public void inviaMailConferma(Utente utente) throws Exception { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(utente.getEmail()); me

我试图做的是通过java代码在浏览器地址栏中解析json对象。我想要获得的JSON对象应该是:

{idUtente : "idUtente"}
所以我实现了这个代码

public void inviaMailConferma(Utente utente) throws Exception {

    SimpleMailMessage message = new SimpleMailMessage();
    message.setTo(utente.getEmail());
    message.setSubject("Conferma registrazione a Portfolio Online");
    InetAddress ip = InetAddress.getLocalHost();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    String idUtente = utente.getUsername();
    Object eval = engine.eval("print(encodeURIComponent(idUtente))");
    message.setText("Ciao " + utente.getUsername() + "! Per registrarsi al sito, cliccare il seguente link: " + ip.getHostAddress() + ":8084/VenditaGioielli/confermaRegistrazione?data=" + eval.toString());
    mailSender.send(message);

}
 ScriptEngine engine = factory.getEngineByName("JavaScript");
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))");
 ScriptEngineManager factory = new ScriptEngineManager();
 ScriptEngine engine = factory.getEngineByName("JavaScript");
 ScriptContext scriptContext = new SimpleScriptContext();
 Bindings binding = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))", binding);
当我运行engine.eval时,我遇到了这个异常

ex = (javax.script.ScriptException) javax.script.ScriptException:
sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "idUtente" is not
defined. (<Unknown source>#1) in <Unknown source> at line number 1
但是engine.eval返回null

编辑

现在我来谈谈这个代码

public void inviaMailConferma(Utente utente) throws Exception {

    SimpleMailMessage message = new SimpleMailMessage();
    message.setTo(utente.getEmail());
    message.setSubject("Conferma registrazione a Portfolio Online");
    InetAddress ip = InetAddress.getLocalHost();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    String idUtente = utente.getUsername();
    Object eval = engine.eval("print(encodeURIComponent(idUtente))");
    message.setText("Ciao " + utente.getUsername() + "! Per registrarsi al sito, cliccare il seguente link: " + ip.getHostAddress() + ":8084/VenditaGioielli/confermaRegistrazione?data=" + eval.toString());
    mailSender.send(message);

}
 ScriptEngine engine = factory.getEngineByName("JavaScript");
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))");
 ScriptEngineManager factory = new ScriptEngineManager();
 ScriptEngine engine = factory.getEngineByName("JavaScript");
 ScriptContext scriptContext = new SimpleScriptContext();
 Bindings binding = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
 String idUtente = utente.getUsername();
 engine.put("idUtente", idUtente);
 Object eval = engine.eval("print(encodeURIComponent(idUtente))", binding);
我有以下例外:

"sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "idUtente" is not defined. (<Unknown source>#1)"
“sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:“idutene”未定义。(#1)

引擎有自己的上下文,不知道什么是
idute
。只需通过
engine.put(“idute”,idute)
将其放入上下文即可。这应该行得通


我写了一篇关于ScriptEngine和绑定的博客文章,特别是:

首先
{idutete:idutete}
实际上是有效的JSON吗?例如,试试
{idutete:“idutete”}
。@HannoBinder,我编辑了这个问题,这是一个书写错误!当然它返回空值。。。您正在打印编码的字符串。@markusw,那我该怎么办?您可以尝试在脚本中定义一个函数,返回所需的值,并使用
Invocable
调用该函数。在评估脚本之前,您是否将其放入上下文中?现在我的笔记本电脑不在这里,因此无法工作。我用一个新的代码重新编辑了这篇文章,后天我会试试。我能把它放在上下文中,但现在我有另一个例外!我能理解上下文,但现在我有另一个例外!删除此getBindings行,不要传递bindings参数。将变量放入引擎的绑定中,然后通过将旧绑定传递给eval调用来重写它