akka 找不到列表[...]的JsonReader或JsonFormat类型类

xe55xuns  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(153)

我尝试使用spray的隐式List[T]封送处理器。

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库,而不仅仅是喷雾,如果这有关系的话。

fhg3lkii

fhg3lkii1#

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

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

相关问题