Scala 如何使用Dispatch解析JSON请求?
我正在学习Scala,并试图了解traits是如何工作的(特别是在Dispatch库中) 我有这样的想法:Scala 如何使用Dispatch解析JSON请求?,scala,scala-dispatch,Scala,Scala Dispatch,我正在学习Scala,并试图了解traits是如何工作的(特别是在Dispatch库中) 我有这样的想法: import dispatch._ import dispatch.liftjson._ object Foo { def main(cmd: Array[String]) { val http = new Http; val req = :/("example.com") / path ># (list ! obj);
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.
导入将把JS
对象的所有内容带入您的范围,包括它从trait ImplicitJsonVerbs
中获得的requestToJsonVerbs
。此方法将标准分派请求
(您从:/(“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]
})))
正如您所看到的,我有正确的导入(加上一些我喜欢的库的导入),我的请求
then'has'有一个.
方法。我给#
一个与预期签名((JValue))匹配的函数⇒ 然后我们就走了
如果您想知道,我特别使用了lift-json的能力来提取case类,这意味着T
将是Device
。但是,如果lift json无法将JValue
转换为设备
,那么它也会引发异常,因此我使用Helper.tryo
包装了我的整个请求,这是一个lift助手方法,它包装了一个try-catch调用,返回一个框
<代码>框
类似于标准的Scala选项
,但添加了故障
,这表明了框
为空的原因。因此,在这种情况下,我将得到一个Full[Device]
或一个Failure
。汉迪