scala隐式传递给参数

问题描述 投票:1回答:1

要将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
  }

CallAPI:

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]
}

但它返回错误

错误:(20,47)找不到类型finance.remittance.data.ResponseBasicModel [String]的Json反序列化器。尝试为此类型实现隐式读取或格式。 return CallAPI [ResponseBasicModel [String]](

有什么解决方案吗?

json scala implicit
1个回答
0
投票

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

写入为null,因为我不使用写入功能。

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
  }
© www.soinside.com 2019 - 2024. All rights reserved.