Мой код действия контроллера выглядит следующим образом:
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())))))
}
})
}
My Service.addIngredient(...) возвращает Promise [Ingredient], но также может генерировать пользовательское исключение ValidationException. Когда это исключение выбрано, я хотел бы вернуть прокомментированный код.
В настоящее время страница отображается как 500 и в моих журналах:
play - Ожидание обещания, но получило ошибку: Ингредиент с именем "Тест" уже существует. services.ValidationException: Ингредиент с именем 'test' уже существует.
Два вопроса:
- Нехорошо ли возвращать это исключение из моей службы, есть ли лучший способ scala справиться с этим случаем?
- Как избежать исключения?