用于播放中的多路径参数的PathBindable

时间:2017-03-22 00:30:48

标签: scala playframework

我在PathBindable上阅读了this doc。

如果我有这样的路线:

GET     /user/:user/posts/:postId            controllers.BinderApplication.post(user: scalaguide.binder.models.Post)

我如何能够捕获Post对象中的两个参数。

帖子类看起来像这样

case class Post(postId: Long, userId: Long)

我知道我可以使用QueryStringBindable,但我想知道是否有办法使用路径参数。

1 个答案:

答案 0 :(得分:1)

在这种情况下,良好做法将是行动组合或只是行动。

路线:

GET     /user/:userId/posts/:postId   controllers.HomeController.post(userId: Long, postId: Long)

控制器:

def post (postId: Long, userId: Long) = Action{
  val user = Post(postId, userId) //some massive operation, could be async, then use Action.async
  Ok(user.toString())
}

要构建Post,您需要获取用户和帖子ID;这似乎是一次非常庞大的操作。在IO线程上播放绑定路由,因此您将通过在此处执行大量操作来阻止所有请求。

Documentation

  

在此示例中,调用findById方法来检索User实例;   请注意,在现实世界中,这种方法应该是轻量级的而不是   涉及例如数据库访问,因为代码是在服务器IO上调用的   线程,必须完全无阻塞。

     

因此,您将使用简单对象标识符作为路径   可绑定,并使用动作组合检索实际值。

还有一些提议来自Greg Methvin(Lightbend工程师)的建议:https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/play-framework/b1fF2EdmCJ8/F2mX1EflJAAJ

但是,如果你想做这样的技巧,你可以使用String Interpolating Routing DSL