2015-03-12 3 views
0

Я пытаюсь закончить службу в spray.io следующие примеры из исходной документации, и я застрял на сообщение об ошибке:спрей-маршрутизации - Akka спросить с ИАС

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

+0

Прежде всего, необходимо обеспечить 'неявное instance' из' spray.httpx.marshalling.ToResponseMarshaller [A] ', если вы хотите, чтобы мобилизовывать некоторый тип' A', который говорит маршаллерам о том, как маршалировать эту вещь. Но здесь ... вы пытаетесь «маршалировать» «Будущее». Это звучит странно, как вы думаете, что вы напишете, если бы у вас был вид 'Stringify'' Future [Int] '?. Пример - для 'List (1, 2, 3)' вы можете написать что-то вроде '[1, 2, 3]'. –

+0

@SarveshKumarSingh Я приводил примеры из источника Spray https://github.com/spray/spray/blob/master/examples/spray-routing/on-spray-can/src/main/scala/spray/examples/DemoService. scala или http://spray.io/documentation/1.2.2/spray-routing/#longer-example – jaksky

ответ

0

Я думаю, что вам нужно в рамках неявного ExecutionContext, чтобы обеспечить возможность Future сортировочной.

0

Изменить эту часть, а также import 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) 
       } 
}