Scala 喷洒路线-akka询问与Marshaller

Scala 喷洒路线-akka询问与Marshaller,scala,akka,spray,spray-dsl,Scala,Akka,Spray,Spray Dsl,我正试图在spray.io中完成一项服务,以下是原始文档中的示例,我被错误消息卡住了: could not find implicit value for parameter marshaller: spray.httpx.marshalling.ToResponseMarshaller[scala.concurrent.Future[AdImporterServiceActor.StatusOfImport]] val adServiceRoute: Route = { path(

我正试图在spray.io中完成一项服务,以下是原始文档中的示例,我被错误消息卡住了:

could not find implicit value for parameter marshaller: spray.httpx.marshalling.ToResponseMarshaller[scala.concurrent.Future[AdImporterServiceActor.StatusOfImport]]


val adServiceRoute: Route = {
    path("service" / "import" / "status") {
      get {
        respondWithMediaType(`text/plain`) {
          complete {
            adImporterService.ask(GetImportStatus)(1 second).mapTo[StatusOfImport]
          }
        }
      }
    }
  }

  implicit val importStatusMarshaller: Marshaller[StatusOfImport] =
    Marshaller.of[StatusOfImport](ContentTypes.`text/plain`) { (value, contentType, ctx) =>
      val string = "Hello marshalled status"
      ctx.marshalTo(HttpEntity(contentType, string))
    }
在哪里

  case class StatusOfImport(statuses: Map[String, ImportStatus], activeRequests:Set[Import])

  case class ImportStatusUpdate(adId: String, statusUpdate: ImportStatus)
我不知道我在这里错过了什么。有经验的人能给点提示吗


Thx

我认为您需要范围内的隐式
ExecutionContext
,以提供
未来的
编组功能

更改此部分,同时导入scala.concurrent.ExecutionContext.Implicits.global

    respondWithMediaType(MediaTypes.`text/plain`) { ctx=>

    (adImporterService.ask(GetImportStatus)(1 second).mapTo[StatusOfImport]).onComplete {
                case Success(s) => ctx.complete(s)
                case Failure(x)=> ctx.complete(StatusCodes.RequestTimeout)
              }
}

首先,如果要封送某种类型的
A
,需要提供
spray.httpx.marshalling.ToResponseMarshaller[A]
隐式实例,它告诉封送器如何封送这件事。但是在这里。。。您正在尝试对未来进行封送处理。这听起来很奇怪,如果你不得不将
字符串化
a
Future[Int]
,你认为你会写什么?。示例-对于
列表(1,2,3)
您可以编写类似
[1,2,3]
@SarveshKumarSingh的内容,我从Spray source或