繁体   English   中英

在Akka-http客户端中使用PlayJson

[英]Using PlayJson in akka-http client

我想在akka-http中编写一个轮询客户端,它将所有响应主体转换为Play JsObject。 到目前为止,我下面的代码使用此库,应该使事情变得简单(我认为?)。 但是,当我尝试运行下面的代码时,出现以下错误:

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()
    }
}

只需删除Unmarshaller[HttpResponse, JsObject]的显式隐式(哇,听起来不错吧?)定义。 不需要,因为PlayJsonSupport提供了合适的解PlayJsonSupport

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM