首页 > 解决方案 > 对于在 scala 中抛出的重复 5XX 响应代码,我应该使用哪种类型的异常?

问题描述

简而言之

如果http请求在scala中不断返回5XX响应代码,我应该抛出什么类型的异常?

长表

我有重试 http 请求的代码,因为我使用一些不太可靠的端点。这些重试往往会奏效。但有时我只是不断收到 5xx 的 408 错误,需要抛出异常。目前我在下面的代码中有一个 IOException 的占位符。

def requestRetrier
...
try {
  responseObject = request(url, headers, payload, requestMethod, connectTimeout, readTimeout)
  if ((List(500, 503...) contains responseObject.responseCode) && (retries != 0)) {
    responseObject = requestRetrier(
      url = url,
      headers,
      payload,
      requestMethod,
      connectTimeout,
      readTimeout,
      retries - 1)
  } else if ((retries == 0) && (List(500, 503...) contains responseObject.responseCode)) {
    throw new java.io.IOException
  }
....

标签: scalaexception

解决方案


我只会创建一个新的自定义异常来更具体并抛出它。

就像是:

case class RetriesExceededException(message: String) extends Exception(message)

然后,您可以在示例中将其用作:

} else if ((retries == 0) && (List(500, 503...) contains responseObject.responseCode)) {
    throw RetriesExceededException(s"Failed to get response after $retryCount tries.")
}

推荐阅读