【问题标题】:scala implicit passing to parameterscala隐式传递给参数
【发布时间】:2018-06-03 15:09:13
【问题描述】:

要将 JsValue 转换为自定义类,请使用此代码。

def Foo(today : String):String = {
    implicit def read (js: JsValue) : Reads[ResponseBasicModel[String]] = Reads[ResponseBasicModel[String]](
      js => JsSuccess(ResponseBasicModel[String](
        ReturnValue = js.\("ReturnValue").toString()
        )
      )
    )

    CallAPI[ResponseBasicModel[String]](
        "GET",
        "URL"
        ,15.second).ReturnValue
  }

调用API:

def CallAPI[A](httpMethod: String, subURL: String, timeout: FiniteDuration)(implicit m: scala.reflect.Manifest[A], read: Reads[A]) :A = {
/...
     Json.parse(robots.toString()).as[A]
}

但它返回错误

Error:(20, 47) No Json deserializer found for type Finance.remittance.data.ResponseBasicModel[String]。尝试实施 此类型的隐式读取或格式。 返回 CallAPI[ResponseBasicModel[String]](

有什么解决办法吗?

【问题讨论】:

  • return 在函数式 Scala 中没用

标签: json scala implicit


【解决方案1】:

我用这段代码解决了这个问题。

Writes 为 null,因为我不使用 writes 函数。

def Foo(today : String):String = {
    implicit object ResponseBasicModelFormat extends Format[ResponseBasicModel[String]]{
    def reads(js: JsValue) =JsSuccess(ResponseBasicModel[String](
        ReturnValue = js.\("ReturnValue").toString()
      ))
    def writes(res : ResponseBasicModel[String]): JsValue=null
  }

    CallAPI[ResponseBasicModel[String]](
        "GET",
        "URL"
        ,15.second).ReturnValue
  }

【讨论】:

  • 我认为您可以使用虚拟的writes 方法扩展Reads 而不是Format
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2023-03-17
  • 2014-04-28
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多