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._”.不确定是否仍然如此.
它可能不是一个理想的解决方案,但我们使用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 } } } 不要忘记将过滤器添加到过滤器链中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |