Я использую scalatra для "экспорта" данных MongoDB в JSon, мои действия очень просты, например:
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)
}
}
Уловитель try больше, чем фактический метод, и мне нужно сделать это для каждого метода, класс становится на первый взгляд уродливой коллекцией try catch. Есть ли способ избежать или свести к минимуму плохо выглядящую и отвлекающую попытку поймать весь код? Я новичок в Scala (и Java BTW), поэтому, я думаю, что что-то не хватает.
Я не хочу, чтобы объект DB отправлял JSON, поэтому наличие try catch в методе db.get_collection не является вариантом.