【问题标题】:How to get JSON as string data from HttpResponse in Akka HTTP如何从 Akka HTTP 中的 HttpResponse 获取 JSON 作为字符串数据
【发布时间】:2018-05-16 12:28:48
【问题描述】:

我正在使用 Akka HTTP 并希望从 Rest API 获取 JSON 响应。

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 作为字符串?

【问题讨论】:

    标签: scala akka akka-http


    【解决方案1】:

    最简单的方法是:

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

    【讨论】:

    • 好的,所以 Unmarshal 也创建了一个“严格”对象?我对那里到底发生了什么感到困惑。谢谢。
    • Unmarshal 的主要思想是将一些低级表示转换为更高级别的对象。在本例中,它将使用下面的响应实体并将其转换为字符串。
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多