play.api.mvc.PathBindable
See thePathBindable companion object
Binder for URL path parameters.
You can provide an implementation of PathBindable[A] for any type A you want to be able to bind directly from the request path.
For example, given this class definition:
case class User(id: Int, name: String, age: Int)
You can define a binder retrieving a User instance from its id, useable like the following:
// In your routes:
// GET /show/:user controllers.Application.show(user)
// For example: /show/42
class HomeController @Inject() (val controllerComponents: ControllerComponents) extends BaseController {
def show(user: User) = Action {
...
}
}
The definition of binder can look like the following:
object User {
implicit def pathBinder(implicit intBinder: PathBindable[Int]) = new PathBindable[User] {
override def bind(key: String, value: String): Either[String, User] = {
for {
id <- intBinder.bind(key, value).right
user <- User.findById(id).toRight("User not found").right
} yield user
}
override def unbind(key: String, user: User): String = {
intBinder.unbind(key, user.id)
}
}
}
Attributes
- Companion
- object
- Graph
-
- Supertypes
-
class Objecttrait Matchableclass Any
- Known subtypes
-
class Parsing[A]object bindableBooleanobject bindableDoubleobject bindableFloatobject bindableIntobject bindableLongobject bindableShortobject bindableStringobject bindableUUIDobject bindableChar
- Self type
-
PathBindable[A]
Members list
In this article