ある種の失敗が実際にはそれほど例外的ではないこの種の状況で例外を処理する一般的な方法の1つはEither[Throwable, Whatever]
、結果を表すために使用することです。either
Dispatch 0.9は、次の方法でこれを便利にします(ちなみに、以前の質問への回答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
たとえば、このStackOverflowの回答を参照してください。