scala – 如何使用Dispatch解析JSON请求?
我正在学习
Scala,并试图了解特征是如何工作的(特别是使用Dispatch库).
我有这样的事情: import dispatch._ import dispatch.liftjson._ object Foo { def main(cmd: Array[String]) { val http = new Http; val req = :/("example.com") / path ># (list ! obj); val res = http(req); } } 不幸的是,它抱怨>#未在dispatch.Request中注册.在dispatch.liftjson中描述了这个特征,我的假设是我应该只需要导入该特征(应该覆盖)以便注册. 解决方法
您应该从dispatch.liftjson.Js._导入.
有特点是没有用的,因为你还没有使用它. JS._ import将把JS对象的所有内容都带到你的范围内,包括它来自特质ImplicitJsonVerbs的implicit conversion requestToJsonVerbs.此方法将标准的Dispatch 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库的一些),然后我的请求’有’一个>#方法.我给>#一个匹配预期签名的函数((JValue)?T)然后我们离开. 如果你想知道,我特意使用lift-json提取到案例类的能力,这意味着T将是Device.但是,如果它无法将JValue转换为Device,则lift-json也会引发异常,所以我用Helper.tryo包装了我的整个请求,这是一个包含try-catch调用的Lift辅助方法,返回一个Box. Box就像标准的Scala选项,但添加了Failure,表示Box为空的原因.因此,在这种情况下,我将获得Full [Device]或Failure.便利! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |