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 メソッドが呼び出されてユーザー インスタンスを取得します。コードはサーバー IO スレッドで呼び出され、完全に非ブロッキングでなければならないため、実際の世界では、そのようなメソッドは軽量であり、DB アクセスなどを伴わない必要があることに注意してください。
したがって、たとえば、単純なオブジェクト識別子をパス バインド可能として使用し、アクション合成を使用して実際の値を取得します。
そして、Greg Methvin (Lightbend エンジニア) からのアドバイスのあるスレッド: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/play-framework/b1fF2EdmCJ8/F2mX1EflJAAJ
それでも、そのようなトリックを実行したい場合は、文字列補間ルーティング DSL を使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加