【问题标题】:Execute a Scala action inside an Java Controller (PlayFramework)在 Java 控制器 (PlayFramework) 中执行 Scala 操作
【发布时间】:2014-07-08 04:01:23
【问题描述】:

我使用 Playfrawork 和 Java 创建了一个应用程序。

我正在使用 SecureSocial 插件。 在我的控制器内部有一种方法,其中一个过程是在 SecureSocial 中执行句柄启动重置密码。 但该方法是用 Scala 编写的。

如果我像这样在我的 Java 源代码中引用该方法:

Registration.handleStartResetPassword();

什么都没有发生!如果我更改为以下行,则相同:

Registration.handleStartResetPassword().apply();

与以下源代码块相同:

play.api.libs.iteratee.Iteratee<byte[], SimpleResult> it = Registration.handleStartResetPassword().apply(ctx()._requestHeader());
Future<SimpleResult> future = it.run();
Option<Try<SimpleResult>> result = future.value();
SimpleResult res = result.get().get();

我删除了所有代码并尝试执行 Secure Social 代码,但没有任何反应。 这是我的方法:

public static Result resetPassword() {
    Registration.handleStartResetPassword().apply();
    return TODO;
}

我的路线是这条:

POST    /reset    controllers.ProfileController.resetPassword

已编辑:添加了另一种我尝试运行但没有运行的方法。

【问题讨论】:

    标签: java scala playframework playframework-2.2 securesocial


    【解决方案1】:

    当你调用 handleStartResetPassword() 时,你会得到一个 Action 的实例,它实际上并没有做任何事情,直到你通过调用 Action.apply(request) 向它提供一个特定的请求,然后它将实际运行该控制器的逻辑操作并返回Future&lt;Result&gt;

    不完全确定您是否可以向后桥接并从中获得播放 Java 异步结果。

    【讨论】:

    • 我怎样才能获得该方法需要的 import play.api.mvc.Request 实例?如果我使用控制器类中的方法“request()”,它会返回给我一个 play.mvc.Http.Request 的实例。
    • 没想到,我的最后一句话也适用于那个。快速浏览一下 play.mvc.Http.Request 并没有给我任何从 Java 访问底层 Request 对象的明显方法。
    • 这就是重点,使用逻辑,你的答案有一个非常好的逻辑,因为接收请求的方法应用返回一个未来。我已经尝试了以下代码,但它只是没有在 scala 上运行该方法。 play.api.libs.iteratee.Iteratee it = Registration.handleStartResetPassword().apply(ctx()._requestHeader()); Future 未来 = it.run(); Option> result = future.value(); SimpleResult res = result.get().get();
    • 我加了源代码哦第一篇。因为在 cmets 中无法读取它。
    • 好吧,我创建了一个 Scala 控制器,以便更容易在 SecureSocial 中运行该方法。但问题仍然存在。我该怎么做?
    猜你喜欢
    • 2018-10-24
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多