みたいなことをいうときに使うサンプルコード:
NGなコード
import com.twitter.finagle.Failure
import com.twitter.util.{Await, Future}
object Example {
def ng: Future[Int] = {
val x = 1 / 0
Future.value(x)
}
def main(args: Array[String]): Unit = {
val x = ng handle {
case _: Throwable => Failure.rejected("invalid value")
}
println(Await.result(x))
}
}
=>
標準エラー
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Example$.ng(Example.scala:5)
at Example$.main(Example.scala:8)
at Example.main(Example.scala)
Exceptionがhandleされない。401 Authorization Requiredなどの4xx系のエラーを返そうとしたときに5xx系のエラーが返ってしまう。
OKなコード
import com.twitter.finagle.Failure
import com.twitter.util.{Await, Future}
object Example {
def ok: Future[Int] = Future {
1 / 0
}
def main(args: Array[String]): Unit = {
val x = ok handle {
case _: Throwable => Failure.rejected("invalid value")
}
println(Await.result(x))
}
}
=>
標準出力
Failure(invalid value, flags=0x09) with NoSources