我使用了Scalatra「出口」一個MongoDB的數據到JSON,我的行爲是非常簡單的,如:如何捕捉任何Scalatra動作中的所有錯誤?
get("/") {
val title = db.get_collection("main", "api", "title")
send_json(title)
}
我想如果事情出差錯,對對方發送一個HTTP錯誤和文本它將被轉換爲對用戶有意義的東西。 所以該方法becames:
get("/") {
try {
val title = db.get_collection("main", "api", "title")
send_json(title)
} catch {
case e:java.util.NoSuchElementException => send_error("DB malformed", InternalError)
case e:com.mongodb.MongoException => send_error("Can not connect to MongoDB", InternalError)
case e => send_error("Internal Error", InternalError)
}
}
的嘗試捕捉較大,實際的方法,我需要爲每一個方法,類成爲一見鍾情嘗試捕捉的一個醜陋的收集做到這一點。 有什麼辦法可以避免或最大限度地減少糟糕的外觀和分心嘗試抓住所有的代碼?我是新來的斯卡拉(和Java順便說一句)所以我想我失去了一些東西。
我不想讓數據庫對象發送JSON,因此在db.get_collection方法上嘗試捕獲不是一個選項。
我最後的解決辦法是: 'VAL ErrorHandling中:PartialFunction [Throwable的,單位] = {' 如果我使用的ErrorHandler,我得到了這個名字的錯誤必須重寫。 它似乎也需要java.lang.Throwable,而不是Exception – user1216071 2012-02-29 04:04:12
@ user1216071好的,我相應地修復了代碼,所以其他人不必弄清楚(如果他們碰巧錯過了你的評論)。 – 2012-02-29 15:59:51