1

I want to deconstruct the HttpResponse that I get from Server

Success(HttpResponse(200 OK,List(Server: akka-http/2.3.12, Date: Tue, 04 Aug 2015 22:20:21 GMT),HttpEntity.Default(application/json,69,akka.stream.scaladsl.Source@52ffaba9),HttpProtocol(HTTP/1.1)))

I looked at documentation, but I am not sure how do I deconstruct it

The way I am trying it is

 val responseFuture: Future[HttpResponse] =
        Http().singleRequest(HttpRequest(uri = "http://localhost:8080"))

      responseFuture onComplete {
        case Success(_) =>
            log.info("response received {}", response)
            log.info("notified about EC Failure")
        }

But I am not sure what is the effective way to pattern match on it

4

3 回答 3

2

像处理 Scala 中的其他 monadic 类型一样处理期货... map、、flatMapforEach朋友:

val responseFuture: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(uri = "http://localhost:8080"))

responseFuture forEach { response =>
  log.info("response received {}", response)
  log.info("notified about EC Failure")
}

// or

for(response <- responseFuture) {
  log.info("response received {}", response)
  log.info("notified about EC Failure")
}
于 2015-08-05T00:03:56.547 回答
1

像这样:

responseFuture onComplete {
  case (Success(HttpResponse(statusCode, header, entity, protocol)), _) =>
    log.info("Request returned status code {} with entity {}", statusCode, entity)
  case (Failure(response), _) =>
    log.info("Request failed with response {}", response)
}

akka.http.scaladsl.model.StatusCodes您可以通过匹配和添加更多案例来处理特定的状态代码。

于 2016-03-13T21:25:02.340 回答
0

您可以捕获其中的类型,Success并将其HttpResponse分配给您可以在模式匹配块中使用的变量。如果Success包含一个HttpResponse它被分配给变量hr,那么我们可以访问类上的HttpResponse方法hr

    case Success(hr:HttpResponse) =>
        log.info("HTTP code: " + hr.status)
    }
于 2015-08-04T23:37:16.483 回答