如何捕获从Future [HttpResponse] scala中抛出的异常

问题描述 投票:0回答:1

我是scala的新手。我正在使用scala的HTTP客户端来攻击另一台服务器。返回的响应是Future [HttpResponse]。这是我的东西:

pathPrefix("run") {
    post {
        entity(as[InputRequest]) { inputRequest =>
            complete {
               runService(inputRequest)
            }
        }
    }
}

def runService(inputRequest:InputRequest) : Future[HttpResponse] = {
    val pipeline: HttpRequest => Future[HttpResponse] = sendReceive  ~> unmarshal[HttpResponse]
    val response: Future[HttpResponse] = pipeline(Post("some-hostname", inputRequest)
    ~> addCredentials(BasicHttpCredentials("user", "pass"))

    response
}

因此,如果响应失败(例如500个内部服务器错误),如何捕获其异常?

scala akka-http
1个回答
0
投票

多种方式:

使用拒绝处理程序指令:

handleRejections(/*your custom rejection handler || default*/) {
  pathPrefix("run") {
  ...
}

recover Future

response.recover {
  case t => // t is Throwable, do something with it
}

然后,函数def runService(inputRequest:InputRequest) : Future[HttpResponse]的返回类型将根据恢复计算的结果而改变

© www.soinside.com 2019 - 2024. All rights reserved.