我尝试使用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
库,而不仅仅是喷雾,如果这有关系的话。
1条答案
按热度按时间fhg3lkii1#
在一个类中,我有一些像上面的jsonFormats,我不得不扩展JsonProtocol。我在需要的地方导入了相关的协议类。