微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala – Play的路由文件中的导入和条件是否可能?

我知道早期版本的Play用于支持路由文件中的路由和条件(如果是块),但我找不到Play 2.2.x和 HTTP routing的任何此类文档.

我想替换这个:

GET /api/users/:id com.corporate.project.controllers.UserController.get(id)

使用导入的较短版本如下:

import com.corporate.project.controllers._ 

GET /api/users/:id UserController.get(id)

此外,路由文件中是否可以有条件?例如

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

解决方法

过去可以通过SBT设置导入包:routesImport =“com.corporate.project.controllers._”.不确定是否仍然如此.

Also,is it possible to have conditionals in the routes file?

它可能不是一个理想的解决方案,但我们使用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
    }
  }

}

不要忘记将过滤器添加到过滤器链中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐