2017-03-09 3 views
0

ich eine JSON-Aktion, die ein sehr einfaches JSON-Objekt zurückgibt, das wie folgt aussieht:Wie eine PSQL Ausnahme und zurück in meiner JSON Aktion behandeln

case class InsertResponse(success: Boolean, message: String) 

Meine Aktion, die JSON zurückzugibt wie folgt aussieht:

def insertUser = Action.async(BodyParsers.parse.json) { request => 
    val userReq = request.body.validate[UserRequest] 

    userReq.fold(
    errors => { 
     Future(Ok(....)) 
    }, 
    userR => { 

     val insertResultFut = 
     for { 
      user <- ....... 
     } yield .... 



     Ok(insertResponse.toJson) 

    } 
) 

} 

Also ich möchte einige Ausnahmen abfangen, die der insertResultFut-Aufruf auslösen kann, da es meine Slick-Datenbank-Ebene aufruft, die in die Datenbank eingefügt wird.

Ich möchte vor einer PSQLException schützen, die ausgelöst wird, wenn die Benutzer-E-Mail ein Duplikat ist, wie kann ich diesen Fehler mit Futures abfangen?

Wenn es eine Ausnahme ist, und es ist ein PSQLException für einen doppelten Schlüssel, mag ich, dass fangen und setzte auch meinen InsertResponse Erfolg-Flag auf Falsch usw.

Gedanken?

Antwort

2

Sie Future#recover für diesen Fall verwenden können:

insertResultFut.recover { 
    case exe: PSQLException if exe.getMessage.contains("duplicate") => BadRequest(InsertResponse(false, "duplicate").toJson) 
} 
Verwandte Themen