加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 08:55:35 所属栏目:安全 来源:网络整理
导读:我知道早期版本的Play用于支持路由文件中的路由和条件(如果是块),但我找不到Play 2.2.x和 HTTP routing的任何此类文档. 我想替换这个: GET /api/users/:id com.corporate.project.controllers.UserController.get(id) 使用导入的较短版本如下: import com.
我知道早期版本的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
    }
  }

}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读