我是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个内部服务器错误),如何捕获其异常?
多种方式:
使用拒绝处理程序指令:
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]
的返回类型将根据恢复计算的结果而改变