使用map(Scala)时缺少参数
我犯了一个恼人的错误,找不到任何解释。 我有以下代码:使用map(Scala)时缺少参数,scala,map,httprequest,Scala,Map,Httprequest,我犯了一个恼人的错误,找不到任何解释。 我有以下代码: Async{ WS.url(url).get().map{ response => //response here is giving me the error. Ok("Response: " + (response.json \ "media_count").as[String]) } } 这给了我一个错误的说法: missing parameter type 关于回应 我应该在哪里定义此参数类型?或者这个错
Async{
WS.url(url).get().map{ response => //response here is giving me the error.
Ok("Response: " + (response.json \ "media_count").as[String])
}
}
这给了我一个错误的说法:
missing parameter type
关于回应
我应该在哪里定义此参数类型?或者这个错误说的更具体些是什么?我认为您使用的是针对Java API的
play.libs.WS
此WS类的WS.url(…).get()
返回此类型的Promise
对象:。此类的map
函数采用一个实例,它与Scala中的Function1
不同。这将导致编译器错误
如果您在Scala中工作,您应该使用
play.api.libs.ws.ws
,这意味着要使用Scala库。将程序中的import play.libs.WS
替换为import play.api.libs.WS.WS
,错误应该会消失。这是我现在的代码,终于可以工作了。我想我是想变得复杂和困难。有时候也没那么复杂。现在我可以面对一些新的障碍,找到新的有趣的解决方案:)
非常感谢,这个错误消失了,但现在又出现了另一个错误。在我的终端窗口中,我得到一个错误,说
[error]play-等待一个承诺,但得到了一个错误:String expected
,然后什么也没发生。我被重定向到我的“Ok()”,但它是空的。我想它至少应该显示类似“Response:null”的内容。可能json中没有“media\u count”,或者它不是一个字符串。从属性的名称来看,它听起来是数字。无论如何,你不会得到空值。如果将来失败,日志中将出现异常,如果您处于开发模式,浏览器中将显示带有错误的redish屏幕。尝试将更改为[String]
位为(response.json \“media\u count”).asOpt[String]
asOpt
将返回一个选项[String]
。如果它返回None
,则media\u count
不是您想象的那样。或者更好的是,返回一个Ok(Json.prettyPrint(response.Json))
来查看您得到的确切信息。我现在无法尝试,但谢谢!我有能力的时候会调查的。我想的一件事是,我的代码不应该至少显示我的字符串“Response:”?我还没来得及看这么多,但我想这是因为在它写出任何“响应:”之前我遇到了一个错误。这是Json.prettyPrint()插件还是?@RobertAxelsson不,它是标准API的一部分:。关于前面的问题,如果未来失败,它将不会提供一些默认值,如“”或null
。它将使整个请求失败,可能返回500个错误代码。Scala允许您将方法用作运算符。因此,您可以说(response.json\(“data”)\(“media\u count”)
而不是(response.json\“data”\“media\u count”)
Async{
try{
WS.url(requestUrl).get().map{ response =>
val param = (response.json.\("data").\("media_count"))
Ok(param.toString())
}
} catch {
case _:Throwable => {
Promise.pure(Ok("there was an error"))
}
}
}