Как получить JSON в виде строковых данных из HttpResponse в Akka HTTP - PullRequest
0 голосов
/ 15 мая 2018

Я использую Akka HTTP и хочу получить ответ JSON от Rest API.

val responseFuture: Future[HttpResponse] = Http().singleRequest(HttpRequest(uri = uri, headers = List(authorization)))

responseFuture
  .onComplete {
    case Success(res) => {
      val strictEntity: Future[HttpEntity.Strict] = res.entity.toStrict(3.seconds)
      strictEntity.onComplete {
        case Success(se) => {
          se...
        }
        case Failure(sf) => {
          println(sf.getMessage)
        }
      }
    }
    case Failure(f) => {
      println("Error:  "+ f.getMessage)
    }
  }

Я заканчиваю тем, что вложил множество этих onComplete обратных вызовов. Это даже самый простой способ? Что я должен сделать с объектом se, чтобы получить JSON в виде строки?

1 Ответ

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

Самый простой способ:

val result: Future[String] = responseFuture.flatMap {
  case HttpResponse(StatusCodes.OK, _, e, _) =>
    Unmarshal(e).to[String]
  case HttpResponse(status, _, e, _) =>
    e.discardBytes() //all entities should be consumed or discarded, so... 
    Future.failed(new InvalidHttpStatus(s"service returned ${status.intValue()}"))
}
...