【问题标题】:How to reverse generate an absolute URL from a route on Play 2 Java?如何从 Play 2 Java 上的路由反向生成绝对 URL?
【发布时间】:2012-06-22 14:56:10
【问题描述】:

我想从 Play 2 Java 中的控制器获取绝对 URL。我找到了exact same question for Scala,但我无法让它在 Java 中工作。

public class MyController extends Controller {
    public static Result myMethod() {
        return ok();
    }

    public static Result test() {
        Logger.info(routes.MyController.myMethod().url); // Doesn't work !
        Logger.info(routes.MyController.myMethod().absoluteURL()); // Doesn't work !
        Logger.info(routes.MyController.myMethod().absoluteURL(true)); // Doesn't work !
        return ok();
    }
}

感谢您的帮助!

【问题讨论】:

    标签: java url playframework playframework-2.0


    【解决方案1】:

    absoluteURL()添加请求

    routes.MyController.myMethod().absoluteURL(request());
    

    【讨论】:

    • 请注意:这是可行的,因为 absoluteURL 使用 Request 对象来查找域。
    • 谁能告诉我它是如何知道使用http url还是https的?问题是我的应用程序在支持 http 和 https 的代理后面。当我通过 https 调用此函数时,它会返回以 http 为前缀的 url,并且由于混合内容策略,我的浏览器会阻止内容。
    【解决方案2】:

    我不确定这是否适用于 2.0,但由于您使用的是 Java,它可能会成功。我在 1.2.4 中使用它。

    Router.getFullUrl("Controller.action")
    

    祝你好运!

    编辑:我导入了 play.mvc.Router,所以如果 2.0 中不存在这个,你可能会发现类似的东西。

    另外,这是play的2.0关于路由的文档,检查反向路由,也许会有所帮助。

    http://www.playframework.org/documentation/2.0.1/JavaRouting

    【讨论】:

    • 太糟糕了,这非常有用。根据我从文档中读到的内容,每次在路由配置中使用控制器时,它都会生成一个反向控制器。看起来像这样controllers.routes.Controller.action(args)。我使用文档链接编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2021-03-18
    • 2011-05-22
    相关资源
    最近更新 更多