有没有办法在play框架中使用“typesafe”参数进行操作?而不是userId是String,它可以是更类型安全的类,如下例所示:
case class UserId(v: String) extends AnyVal
object UsersController extends Controller {
def get(userId: UserId) = Action {
Ok(Users.find(userId))
}
}
这也会使测试代码更加类型安全:
val userId: UserId = ....
FakeRequest(routes.UsersController.get(userId))
如果您不小心传递了其他内容,上面的代码会给出编译器错误。
...但要到达那里你必须以某种方式将它转换为.routes
文件中的正确类型..?
答案 0 :(得分:1)
您可以使用PathBindable[A]
特征。
http://julien.richard-foy.fr/blog/2012/04/09/how-to-implement-a-custom-pathbindable-with-play-2/