您应该从dispatch.liftjson.Js._
.
拥有一个特征没有帮助,因为你没有使用它。JS._
导入会将对象的所有内容带入JS
您的范围,包括它具有的隐式转换 from 。此方法将您拥有的标准 Dispatch 转换为具有方法的。requestToJsonVerbs
trait ImplicitJsonVerbs
Request
:/("example.com") / path
JsonVerbs
>#
这是我如何查询 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
。便利!