我试图使用喷雾的隐含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
库,而不仅仅是喷涂,如果这很重要的话。
答案 0 :(得分:0)
trait JsonProtocol extends SprayJsonSupport with DefaultJsonProtocol{
implicit val applicationInfoFormat = jsonFormat3(ApplicationInfo)
...
}
在一个类中,我有一些像上面那样的 jsonFormats,我不得不扩展 JsonProtocol。 我在需要的地方导入了相关的协议类。