可对游戏中的多个路径参数进行路径绑定



我在PathBindable上阅读了这个文档。

如果我有这样的路线:

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

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

后类看起来像这样

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

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

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

路线:

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 线程上播放绑定路由,因此您将通过在这个地方执行大量操作来阻止所有请求。

文档:

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

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

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

不过,如果你想做这样的技巧,你可以使用字符串插值路由DSL

最新更新