Ich möchte Ausnahme erfassen und auf eine benutzerdefinierte Seite im folgenden Code umleiten. Ausnahmen werden jedoch nicht erkannt.Handle Ausnahme in Play2.5/Scala-Controller
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")
}
}
)
}
Ich dachte, ich Redirect tun kann() von onComplete Erfolg statt auf Linie markiert „+++“ aber ich habe diese Kompilierungsfehler:
type mismatch;
[error] found : Unit
[error] required: play.api.mvc.Result
[error] case Some(ue) =>
[error] ^
[error] one error found
Ich spiele Dokumentation überprüft, es spricht über Hinzufügen von onServerError zu ErrorHandler (zentralisiert), aber ich möchte wissen, was ich vermisse, indem ich es so mache.
Ich lerne immer noch Scala, jede Hilfe wird sehr geschätzt.
Verwenden Sie 'map' für den guten Fall und' recover' für die Ausnahme. – rethab