Как отловить исключение, выброшенное из будущего [HttpResponse] scala - PullRequest
0 голосов
/ 21 февраля 2020

Я новичок в scala. Я использую HTTP-клиент scala для подключения к другому серверу. Ответ возвращается в будущем [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 внутренняя ошибка сервера) из ответа, как перехватить его исключение?

1 Ответ

1 голос
/ 21 февраля 2020

Пара способов сделать это:

Использование директивы обработчика отклонений:

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] будет меняться в зависимости от того, что ваше восстановление оценивается в

...