Playframework 2.0 以编程方式在Play2.0中添加管线

Playframework 2.0 以编程方式在Play2.0中添加管线,playframework-2.0,Playframework 2.0,在游戏1.2.X中,我们可以 Router.addRoute("GET", "/somePath", "controller.methodName"); 我正在编写一个模块,其中添加了一个“路由”,该路由将由模块中的控制器处理。这是一个OAuth处理程序,希望用户不必处理OAuth握手等 如何在play2.0中做到这一点?*play2.0* *在路由文件中添加此行* GET/somePath controller.methodName()我不确定您是否可以 Play 2.0的概念是关注类型安全

在游戏1.2.X中,我们可以

Router.addRoute("GET", "/somePath", "controller.methodName");
我正在编写一个模块,其中添加了一个“路由”,该路由将由模块中的控制器处理。这是一个OAuth处理程序,希望用户不必处理OAuth握手等

如何在play2.0中做到这一点?

*play2.0* *在路由文件中添加此行*
GET/somePath controller.methodName()

我不确定您是否可以

Play 2.0的概念是关注类型安全,其中包括routes文件。现在将编译路由文件,而不是在运行时进行解释。如果查看routes文件的代码,它会从routes文件本身生成一个scala类。因此,运行时操作将被忽略

不幸的是,看起来您的路由必须在routes文件中定义,除非您愿意拦截http请求以自己检查特定的路由,而/@文档链接在scala类中似乎就是这样做的


另请参见此错误帖子

您不能以编程方式将其添加到Routes对象,但您可以拦截web请求,并通过覆盖
GlobalSettings.OnRouterRequest
自行处理这些请求。例如:

覆盖def onroutereRequest(请求:RequestHeader):选项[Handler]={
//首先进行我们自己的路径匹配-否则将其传递到游戏中。
请求路径匹配{
case“/injectedRoute”=>Some(controllers.Application.customRoute)
case z=>Play.maybeaapplication.flatMap(z.routes.flatMap{
路由器=>
路由器.handlerFor(请求)
})
}
}

我不知道这是否是推荐的方法,但它对我有效。下面是github上的一个示例:

您可以在routes文件中添加一个通用路由(在文件末尾,因为它的优先级将根据声明的位置进行评估)

将要在运行时执行的逻辑放入控制器类中

public static Result showPage(String page){

    if(page.contains("abc"){
      .....
    } else {
      //return 404
    }
}

我不确定它是否适合您的需求,但在大多数情况下,它就足够了。

他希望以编程方式完成它,而不是通过2.3.7的configWorks很好地完成(除了我现在没有进行的性能测试)。一个很好的替代路由文件的限制…嗨,你能告诉我路由文件的代码吗。我正在尝试在不使用sbt插件的情况下使play项目专业化。我很难弄清楚这个scala文件是如何创建的。我正在使用play 2.3
public static Result showPage(String page){

    if(page.contains("abc"){
      .....
    } else {
      //return 404
    }
}