3

我以这种(简单,阻塞)的方式从我的请求中得到响应:

val response = Http(req)()

但我从 Play 收到了这个错误!框架:

ExecutionException: java.net.ConnectException: Connection refused to http://localhost:8983/update/json?commit=true&wt=json

我从来没有考虑过 Dispatch 或 Scala 中的异常处理。在 Dispatch 库中我必须注意哪些错误?捕获每种类型/类别的错误的语句是什么?

4

1 回答 1

6

Either[Throwable, Whatever]在这种情况下处理异常的一种常见方法是使用来表示结果,其中某种失败实际上并不是那么异常。Dispatch 0.9使用eitheron 方法使这一点变得方便Promise(顺便说一句,我在回答您之前的问题时使用了该方法):

import com.ning.http.client.Response

val response: Either[Throwable, Response] = Http(req).either()

现在您可以非常自然地使用模式匹配来处理异常:

import java.net.ConnectException

response match {
  case Right(res)                => println(res.getResponseBody)
  case Left(_: ConnectException) => println("Can't connect!")
  case Left(StatusCode(404))     => println("Not found!")
  case Left(StatusCode(code))    => println("Some other code: " + code.toString)
  case Left(e)                   => println("Something else: " + e.getMessage)
}

您还可以使用许多其他方法来Either更方便地处理故障 - 例如,请参阅这个 Stack Overflow 答案

于 2012-09-22T18:25:55.000 回答