加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使用Dispatch解析JSON请求?

发布时间:2020-12-16 19:15:14 所属栏目:安全 来源:网络整理
导读:我正在学习 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
我正在学习 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.便利!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读