HTTP-клиент Akka - Unmarshal с Play JSON - PullRequest
0 голосов
/ 04 мая 2018

Я использую Akka HTTP в качестве клиента, чтобы выполнить запрос POST и проанализировать ответ. Я использую Play JSON и получаю следующую ошибку компилятора:

could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.Unmarshaller[akka.http.javadsl.model.ResponseEntity,B]
[ERROR]       Unmarshal(response.entity).to[B].recoverWith {

Это зависимость, которую я добавил, чтобы использовать Play JSON вместо Spray:

"de.heikoseeberger" %% "akka-http-play-json"

Мое определение класса:

class HttpClient(implicit val system: ActorSystem, val materializer: Materializer) extends PlayJsonSupport {

и определение метода:

private def parseResponse[B](response: HttpResponse)(implicit reads: Reads[B]): Future[B] = {
  if (response.status().isSuccess) {
    Unmarshal(response.entity).to[B].recoverWith {
    ....

В импорте у меня есть:

import play.api.libs.json._
import scala.concurrent.ExecutionContext.Implicits.global
import de.heikoseeberger.akkahttpplayjson.PlayJsonSupport._

Мне кажется, что у меня есть необходимые последствия в области. Часть Marshal имеет аналогичную логику (но с Writes вместо Reads) и прекрасно компилируется. Чего мне не хватает?

1 Ответ

0 голосов
/ 04 мая 2018

Проверьте ваш другой импорт. Судя по сообщению об ошибке, вы используете akka.http.javadsl.model.HttpResponse вместо akka.http.scaladsl.model.HttpResponse; PlayJsonSupport поддерживает только Scala DSL:

private def parseResponse[B](response: HttpResponse)(implicit reads: Reads[B]): Future[B] = ???
                                    // ^ this should be akka.http.scaladsl.model.HttpResponse

Другими словами, используйте

import akka.http.scaladsl.model._

вместо

import akka.http.javadsl.model._
...