2012-09-22 39 views
3

我讓我從我的請求,這個(簡單,阻塞)的方式迴應:調度錯誤處理

val response = Http(req)() 

但我從玩得到這個錯誤!框架:

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

我從來沒有想過在調度或斯卡拉異常處理此事。 Dispatch庫中必須注意哪些錯誤?捕捉每種類型/類別的錯誤的聲明是什麼?

回答

6

在這種情況下處理異常的一種常見方式是,使用Either[Throwable, Whatever]來表示結果。調度0.9使得這種方便與Promiseeither方法(這是我在my answer to your earlier question使用,順便說一句):

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使處理失敗更加方便 - 例如參見this Stack Overflow answer

+1

當有200個HTTP代碼被返回時,有沒有辦法獲得響應正文? –

+0

你好,模式匹配那裏等待或阻止,直到你得到一個迴應,就像如果你使用一個理解?我對使用此解決方案是否安全有點困惑。謝謝! – chaotive