【问题标题】:How do I de-construct HttpResponse?如何解构 HttpResponse?
【发布时间】:2015-10-27 13:07:02
【问题描述】:

我想解构我从服务器获得的HttpResponse

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

我看了documentation,但不知道如何解构它

我尝试的方式是

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

但我不确定对其进行模式匹配的有效方法是什么

【问题讨论】:

    标签: scala pattern-matching akka akka-http


    【解决方案1】:

    像处理 Scala 中的其他一元类型一样处理期货...mapflatMapforEach 和朋友们:

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

    【讨论】:

      【解决方案2】:

      像这样:

      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并添加更多案例来处理特定的状态码。

      【讨论】:

        【解决方案3】:

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

            case Success(hr:HttpResponse) =>
                log.info("HTTP code: " + hr.status)
            }
        

        【讨论】:

          猜你喜欢
          • 2011-02-20
          • 1970-01-01
          • 2011-06-25
          • 1970-01-01
          • 2012-10-03
          • 2018-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多