我知道早期版本的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 举报,一经查实,本站将立刻删除。