微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 CloseableHttpClient.execute() 捕获异常所需的代码结构

如何解决从 CloseableHttpClient.execute() 捕获异常所需的代码结构

鉴于,

val request: HttpPost = new HttpPost(url)
val response: CloseableHttpResponse = client.execute(request)

如何使用 try catch 块安排它们,以便我可以正确捕获异常?

Here 它说 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解决方案?

感谢您的帮助。

解决方法

我猜您正在寻找类似于 java 中的 try-with-resources 的东西,在 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")
  }
,

catch 块可以命名它捕获的异常,如

catch (SQLException e) { .... }

所以你可以有多个 catch 块来处理不同的异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。