#java #scala #apache-httpclient-4.x
#java #scala #apache-httpclient-4.x
Вопрос:
Учитывая,
val request: HttpPost = new HttpPost(url)
val response: CloseableHttpResponse = client.execute(request)
Как мне упорядочить их с помощью блоков try catch, чтобы я мог правильно перехватывать исключения?
Здесь говорится, что execute()
может генерироваться 2 исключения, поэтому я попытался сделать
val client: CloseableHttpClient = HttpClientBuilder.create().build()
try{
val response: CloseableHttpResponse = client.execute(request)
}catch {
case ClientProtocolException => println("Excepton1")
case IOException => println("Exception2")
}finally {
response.close()
client.close()
}
но это недопустимо, поскольку response
не разрешено в finally
блоке с момента его объявления try
.
Любое решение, которое не заставляет меня использовать var
?
Спасибо за помощь.
Ответ №1:
Я предполагаю, что вы ищете что-то похожее на try-with-resources из java, в scala, который вы можете использовать scala.util.Using
. Вот пример использования для вашего случая
val url = ""
val request: HttpPost = new HttpPost(url)
Using.Manager { use =>
val client: CloseableHttpClient = use(HttpClientBuilder.create().build())
val response: CloseableHttpResponse = use(client.execute(request))
}.recover {
case ClientProtocolException => println("Excepton1")
case IOException => println("Exception2")
}
Ответ №2:
Блок catch может назвать исключение, которое он улавливает, как в
catch (SQLException e) { …. }
Таким образом, у вас может быть несколько блоков catch, адресующих разные исключения.
Комментарии:
1. за исключением того , что это было бы написано
catch { case e: SQLException => ... }
.