找不到List [...]的JsonReader或JsonFormat类型类

时间:2017-05-17 01:26:25

标签: scala akka spray-json

我试图使用喷雾的隐含List[T] marshallers。这是我定义的json格式化程序

object ImportMultiResponseMarshaller extends DefaultJsonProtocol {

  val successKey = "success"
  val errorKey = "error"

  implicit object ImportMultiResponseFormatter extends RootJsonFormat[ImportMultiResponse] {
    override def read(value: JsValue): ImportMultiResponse = {
      val f = value.asJsObject.fields
      val success = f(successKey).convertTo[Boolean]
      val error = f(errorKey).convertTo[String]
      ImportMultiResponse(success,error)
    }

    override def write(response: ImportMultiResponse): JsValue = {
      val m = Map(
        successKey -> JsBoolean(response.success),
        errorKey -> JsString(response.error)
      )
      JsObject(m)
    }
  }
}

这是我尝试使用代码的地方:

  def importMulti(request: ImportMultiRequest): Future[ImportMultiResponse] = {
    import spray.json._
    import DefaultJsonProtocol._
    import org.bitcoins.rpc.marshallers.wallet.ImportMultiRequestMarshaller._
    import org.bitcoins.rpc.marshallers.wallet.ImportMultiResponseMarshaller._
    val json = request.toJson
    val array = JsArray(json)
    val cmd = "importmulti"
    sendCommand(cmd,array).map { json =>
      val result = json.convertTo[List[ImportMultiResponse]]
      result.head
    }
  }

这是我得到的错误:

[error] /home/chris/dev/bitcoin-s-rpc-client/src/main/scala/org/bitcoins/rpc/RPCClient.scala:280: Cannot find JsonReader or JsonFormat type class for List[org.bitcoins.rpc.bitcoincore.wallet.ImportMultiResponse]
[error]       val result = json.convertTo[List[ImportMultiResponse]]

我已经查看过有关此问题的其他问题,但似乎他们忘记导入我已完成的spray.json._DefaultJsonProtocol._。有没有其他人看到我做错了什么?

我正在使用akka-http-spray-json库,而不仅仅是喷涂,如果这很重要的话。

1 个答案:

答案 0 :(得分:0)

trait JsonProtocol extends SprayJsonSupport with DefaultJsonProtocol{
  implicit val applicationInfoFormat = jsonFormat3(ApplicationInfo)
...
}

在一个类中,我有一些像上面那样的 jsonFormats,我不得不扩展 JsonProtocol。 我在需要的地方导入了相关的协议类。

相关问题