例外を捕捉して、次のコードでカスタムページにリダイレクトしたいと思います。しかし、例外は捕捉されていません。Play2.5/scalaコントローラのハンドル例外
def addItemWithParts(item: Item, parts: Seq[String]): Future[Int] = {
... // May throw exceptions
}
def handleAddItem = auth.SecuredAction.async { implicit request =>
itemForm.bindFromRequest.fold(
formWithErrors => {
Future.successful(
Redirect(controllers.www.routes.ItemController.startAddItem()).flashing(
"error" -> "Bad item add input"
)
)
},
item => {
for {
ue <- usersService.findUserEntryByEmail(request.identity.email)
} yield ue match {
case Some(ue) =>
val itemObj = Item(item.name, item.description, ue.companyId)
val xx = itemsService.addItemWithParts(itemObj, Seq(item.parts)) <-- want to catch exception thrown by this function
/*
* COMMENTED CODE PRINTS EXCEPTION ON CONSOLE, BUT DONT KNOW HOW TO REDIRECT/OK...
xx onComplete {
case Success(x) => {
println("Added ITEM: " + x)
Redirect(controllers.www.routes.Dashboard.dashboard)
}
case Failure(exp) => {
println("Exception while adding ITEM: " + exp)
Ok("Got exception: " + exp)
}
}
*/
Redirect(controllers.www.routes.Dashboard.dashboard) // +++
case None =>
Ok("Bad")
}
}
)
}
私はonCompleteの成功から代わりのラインで)(私はリダイレクトを行うことができます思ったが、「+++」マークが、私は、このコンパイルエラーを取得:
type mismatch;
[error] found : Unit
[error] required: play.api.mvc.Result
[error] case Some(ue) =>
[error] ^
[error] one error found
私は遊びのドキュメントをチェックし、それが語りますErrorHandler(集中化された)にonServerErrorを追加するが、私はこのようにして何が欠けているのか知りたい。
私はまだScalaを学んでいますが、どんな助けもありがとうございます。
良い場合は 'map'を、例外は' recover'を使います。 – rethab