2016-11-20 11 views
0

すべてのレスポンスボディをPlay JsObjectに変換するakka-httpにポーリングクライアントを書きたいと思っています。私が今までに持っているものは、以下をコードすることです。それは、簡単にするべきであるthis libraryを使用しています(私は思いますか?)。しかし、私は次のエラーを取得する下のコードを実行しようとすると:akka-httpクライアントでPlayJsonを使用する

Error:(26, 56) type mismatch; 
found : akka.http.scaladsl.unmarshalling.FromEntityUnmarshaller[play.api.libs.json.JsObject] 
    (which expands to) akka.http.scaladsl.unmarshalling.Unmarshaller[akka.http.scaladsl.model.HttpEntity,play.api.libs.json.JsObject] 
required: akka.http.scaladsl.unmarshalling.Unmarshaller[akka.http.scaladsl.model.HttpResponse,play.api.libs.json.JsObject] 
    Unmarshaller.byteStringUnmarshaller.mapWithCharset { (data, charset) => 

私は期待通りに働いて事を得るために変更する必要がありますか?

import java.util.UUID 

import akka.actor.ActorSystem 
import akka.http.scaladsl.Http 
import akka.http.scaladsl.model.{HttpEntity, HttpRequest, HttpResponse} 
import akka.stream.ActorMaterializer 
import akka.stream.scaladsl.Source 
import akka.http.scaladsl.unmarshalling.{Unmarshal, Unmarshaller} 
import de.heikoseeberger.akkahttpplayjson.PlayJsonSupport._ 
import play.api.libs.json.{JsObject, Json} 

import scala.concurrent.duration._ 
import scala.util.{Success, Try} 


object Main extends App { 

    implicit val system = ActorSystem("TestSys") 
    implicit val ec = system.dispatcher 
    implicit val materializer = ActorMaterializer() 

    implicit val um:Unmarshaller[HttpResponse, JsObject] = { 
    Unmarshaller.byteStringUnmarshaller.mapWithCharset { (data, charset) => 
     Json.parse(data.toArray).as[JsObject] 
    } 
    } 

    val request = HttpRequest(uri="https://www.google.com/finance/info?q=INDEXDB%3ADAX") -> UUID.randomUUID() 
    val pool = Http().superPool[UUID]() 
    val googleFinanceFlow = 
    Source.tick(0 milliseconds,10000 milliseconds,request) 
     .via(pool) 
    .runForeach { 
     case (Success(response),_) => 
     val json = Unmarshal(response).to[JsObject] 
     println(json.onSuccess{case r => println(r.toString())}) 
     case _ => Json.obj() 
    } 
} 

答えて

0

Unmarshaller[HttpResponse, JsObject]の明示的な暗黙的な暗黙の定義を削除するだけです。適切なアンマーシャラーがPlayJsonSupportによって提供されるため、これは必要ありません。

関連する問題