您应该从dispatch.liftjson.Js._.
拥有一个特征没有帮助,因为你没有使用它。JS._导入会将对象的所有内容带入JS您的范围,包括它具有的隐式转换 from 。此方法将您拥有的标准 Dispatch 转换为具有方法的。requestToJsonVerbstrait ImplicitJsonVerbsRequest:/("example.com") / pathJsonVerbs>#
这是我如何查询 API 的精简示例:
import dispatch._
import dispatch.liftjson.Js._
import net.liftweb.common.{Box, Failure, Full}
import net.liftweb.util.Helpers
case class Device(device_token: String, alias: Option[String])
val req = devicesReq / device_token as (app_token, secret)
Helpers.tryo(http(req ># (json => {
json.extract[Device]
})))
如您所见,我有正确的导入(加上一些我喜欢的Lift库),然后我Request“有”一个>#方法。我给出>#了一个与预期签名 ( ) 匹配的函数,(JValue) ⇒ T然后我们就走了。
如果您想知道,我专门使用 lift-json 提取到案例类的能力,这T意味着Device. JValue但是,如果 lift-json 无法将 转换为 a ,它也会引发异常Device,所以我用 包装了我的整个请求Helper.tryo,这是一个包装 try-catch 调用的 Lift 辅助方法,返回 a Box。Box类似于标准的 Scala Option,但添加了Failure,这表明为什么 aBox是空的。所以,在这种情况下,我会得到 aFull[Device]或 a Failure。便利!