Ich habe eine Registrierung Aktion, die nach User-E-Mails fragt, in meiner Postgres-Datenbank erlaube ich nur eindeutige E-Mails. Wenn ich in einer doppelten E-Mail setzen erhalte ich die Fehlermeldung zurückScala slick wie kann ich meine eigene zurückgeben Fehlermeldung
**Failure(org.postgresql.util.PSQLException: ERROR: duplicate key value violates
unique constraint "same_name_profiles_email"
Detail: Key (email)=([email protected]) already exists.)**
Ich mag würde meine eigene generische Fehlermeldung statt zurückzukehren, etwas ähnliches, was sie hier How to catch slick postgres exceptions for duplicate key value violations tun. Die Frage, die ich gegenüber habe ist, dass ich einen Fehler von
**constructor cannot be instantiated to expected type;
found : akka.actor.FSM.Failure
required: scala.util.Try[Int]**
bin immer Was ich tun möchte, ist die Fehlermeldung Code und sqlState Code zu erhalten. Dies ist mein Code
def registration = Action.async {implicit request=>
val setup =
sqlu"""INSERT Logic"""
db.run(setup.asTry).map { result =>
if(result.isFailure)
{
result match {
case Failure(e: PSQLException) => {
//code: if Error I would like to return message below
Ok(s"PostgresIntegrityConstraintViolationException, code: ${e.getErrorCode}, sql status: ${e.getSQLState}, message: ${e.getMessage}")
}
}
}
Ok(result.toString())
}
}
Jedes Mal, wenn ein Fehler in der Datenbank ist es im Inneren des result.isFailure fällt jetzt würde ich nur die PSQLException ErrorCode- und SQLState erhalten möchte. Ich interessiere mich nicht wirklich für das Zusammenpassen oder irgendetwas. Ich mache das für eine Web-Service-API, also wenn ich zum Beispiel sehe, dass der Fehlercode 23008 mit der doppelten E-Mail übereinstimmt, kann ich dem Benutzer eine generische Nachricht wie "Duplicate Email" geben. Irgendwelche Vorschläge wären großartig, da ich neu bei Scala und Slick bin. Ich bin mit Slick-Version 3.11
Die Fehlermeldung aus diesem Teil richtig
result match {
case Failure(e: PSQLException) => {
//code: if Error I would like to return message below
Ok(s"PostgresIntegrityConstraintViolationException, code: ${e.getErrorCode}, sql status: ${e.getSQLState}, message: ${e.getMessage}")
}
}
Vielen Dank, dass funktioniert – user1591668