Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 导入和条件是否起作用';有可能吗?_Scala_Playframework 2.2 - Fatal编程技术网

Scala 导入和条件是否起作用';有可能吗?

Scala 导入和条件是否起作用';有可能吗?,scala,playframework-2.2,Scala,Playframework 2.2,我知道早期版本的Play用于支持routes文件中的routes和Conditional(如果块),但我找不到Play 2.2.x的任何此类文档,也没有提到此类功能 我想替换这个: GET /api/users/:id com.corporate.project.controllers.UserController.get(id) 使用import导入较短版本,如下所示: import com.corporate.project.controllers._ GET /api/users/:

我知道早期版本的Play用于支持routes文件中的routes和Conditional(如果块),但我找不到Play 2.2.x的任何此类文档,也没有提到此类功能

我想替换这个:

GET /api/users/:id com.corporate.project.controllers.UserController.get(id)
使用
import
导入较短版本,如下所示:

import com.corporate.project.controllers._ 

GET /api/users/:id UserController.get(id)
此外,在routes文件中是否可以有条件?e、 g

if Play.isDev(Play.current())
  GET /displayConfig   DebugController.displayServerConfigs()

谢谢你的提问,这是一个有趣的想法,所以我去了Play2的源代码,发现在Play.core.Router.scala中的Play2.2.3的签出中:object HandlerInvoker将控制器构造为

handlerDef.ref.getClass.getClassLoader.loadClass(handlerDef.controller)
因此,我担心2.2.x中没有实现对部分类名(存储在handlerDef.controller中)的支持

在2.3.x中有commit 这为路由带来了包/名称空间的概念

请查看该提交中Routes.scala和RouteCompiler.scala的更改

但是我在文档中找不到该功能的描述,我现在没有Play2.3.x来使用它


注意:中描述的2.3.x高级路由的示例魔术。

包导入过去可以通过SBT设置实现:
routeImport+=“com.corporate.project.controllers.”
。不确定情况是否仍然如此

此外,在routes文件中是否可以有条件

这可能不是一个理想的解决方案,但我们使用routes标签来处理这种条件路由。您需要一个过滤器来检查路由是否已注释并运行您的条件逻辑

路线:

# @devmode
GET /displayConfig   DebugController.displayServerConfigs()
过滤器:

object DevmodeRouteFilter extends Filter {

  private val DevmodeAnnotation = "@devmode"

  override def apply(next: RequestHeader => Future[SimpleResult])(request: RequestHeader): Future[SimpleResult] = {
    if(isDevRoute(request) && !Play.isDev(Play.current()) {
      Play.current.global.onHandlerNotFound(request)
    } else {
      next(request)
    }
  }

  private def isDevRoute(request: RequestHeader): Boolean = {
    val comments = request.tags.getOrElse(Routes.ROUTE_COMMENTS, "")
    comments.lines.exists { comment =>
      comment.trim == DevmodeAnnotation
    }
  }

}

不要忘记将筛选器添加到筛选器链。

如果需要针对特定情况的条件路由: