Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用Dispatch解析JSON请求?_Scala_Scala Dispatch - Fatal编程技术网

Scala 如何使用Dispatch解析JSON请求?

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);

我正在学习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);
        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
。汉迪