Scala 带有替代项的重载方法值:在使用请求调用Call.absoluteURL时
这是我的密码Scala 带有替代项的重载方法值:在使用请求调用Call.absoluteURL时,scala,playframework,playframework-2.3,Scala,Playframework,Playframework 2.3,这是我的密码 class AuthAction(callbackUri:String) extends ActionBuilder[UserRequest] with ActionRefiner[Request,UserRequest]{ override def refine[A](request: Request[A]): Future[Either[Result,UserRequest[A]]] = { val redirectUri = routes.Applic
class AuthAction(callbackUri:String) extends ActionBuilder[UserRequest] with ActionRefiner[Request,UserRequest]{
override def refine[A](request: Request[A]): Future[Either[Result,UserRequest[A]]] = {
val redirectUri = routes.Application.callback(None, None).absoluteURL(request)
getUser(request) match {
case Some(user) => Future.successful(Right(new UserRequest(user,request)))
case _ => Future.successful(Left(oauthLogin(callbackUri,redirectUri)(request)))
}
}
}
当我试图编译这段代码时,我得到以下错误
[error] (secure: Boolean)(implicit request: play.api.mvc.RequestHeader)String <and>
[error] (x$1: play.mvc.Http.Request)String
[error] cannot be applied to (play.api.mvc.Request[A])
[error] val redirectUri = routes.Application.callback(None, None).absoluteURL(request)
[错误](安全:布尔)(隐式请求:play.api.mvc.RequestHeader)字符串
[错误](x$1:play.mvc.Http.Request)字符串
[错误]无法应用于(play.api.mvc.Request[A])
[错误]val redirectUri=routes.Application.callback(无,无)。绝对URL(请求)
这与隐式参数有关吗?这里发生了什么?它需要
play.mvc.Http.Request
,而您正试图传入play.api.mvc.Request
。它们不兼容
编辑:要回答您在评论中提出的问题。。。
我不确定你说的是哪个参数。此函数有两种风格:
那个,你好像想打电话给-
absoluteURL(请求:play.mvc.Http.request)
-不接受任何隐式参数,它只需要正确类型的请求
另一个-absoluteURL(secure:Boolean)(隐式请求:play.api.mvc.RequestHeader)
-有一个隐式参数,它的类型也与您的不同(RequestHeader
,而不是request
)
如果将包含此requestHeader
的变量声明为implicit
,并且它在范围内,则可以调用后一个函数,而无需显式指定它:
implicit val requestHeader = createMyRequestHeader()
routes.Application.callback(None, None).absoluteURL(true)
或者,您仍然可以像使用常规参数一样显式地传递它(在这种情况下,您不需要将其声明为隐式):
是的,你说得对。非常感谢。这是我第二次混淆java类。如何在此处隐式传递请求参数?我编辑了我的答案以添加对此问题的响应。
routes.Application.callback(None, None).absoluteURL(true)(requestHeader)