【发布时间】:2012-06-09 13:17:55
【问题描述】:
我的控制器操作代码如下所示:
def addIngredient() = Action { implicit request =>
val boundForm = ingredientForm.bindFromRequest
boundForm.fold(
formWithErrors => BadRequest(views.html.Admin.index(formWithErrors)),
value => {
Async {
val created = Service.addIngredient(value.name, value.description)
created map { ingredient =>
Redirect(routes.Admin.index()).flashing("success" -> "Ingredient '%s' added".format(ingredient.name))
}
// TODO on exception do the following
// BadRequest(views.html.Admin.index(boundForm.copy(errors = Seq(FormError("", ex.getMessage())))))
}
})
}
我的 Service.addIngredient(...) 返回一个 Promise[Ingredient] 但也可以抛出一个自定义的 ValidationException。当抛出此异常时,我想返回注释代码。
目前页面呈现为 500 并且在我拥有的日志中:
play - 等待承诺,但出现错误:有名称的成分 “测试”已经存在。 services.ValidationException:有名称的成分 “测试”已经存在。
两个问题:
- 从我的服务中返回此异常是不是一个坏主意,是否有更好/更 scala 的方式来处理这种情况?
- 如何捕获异常?
【问题讨论】:
-
前几天修复了一个错误。见this commit。您可以在
Global对象的onError挂钩中处理运行时异常。 -
但是没有办法在本地捕获异常?
-
是的,您可以像其他任何异常一样捕获它,如 kheraud 的回答所示。
标签: scala exception-handling validation playframework-2.0