如何在我的 JSON 操作中处理 PSQL 异常和 return
How to handle a PSQL exception and return in my JSON action
我有一个 JSON 动作,returns 一个非常简单的 JSON 对象,看起来像:
case class InsertResponse(success: Boolean, message: String)
我的操作 returns JSON 看起来像:
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)
}
)
}
所以我想捕获 insertResultFut 调用可能抛出的某些异常,因为它调用了插入数据库的光滑数据库层。
我想防止在用户电子邮件重复时抛出的 PSQLException,如何使用 futures 捕获此错误?
如果出现异常,并且它是重复键的 PSQLException,我想捕获它并将我的 InsertResponse 成功标志设置为 false 等。
想法?
在这种情况下您可以使用 Future#recover
:
insertResultFut.recover {
case exe: PSQLException if exe.getMessage.contains("duplicate") => BadRequest(InsertResponse(false, "duplicate").toJson)
}
我有一个 JSON 动作,returns 一个非常简单的 JSON 对象,看起来像:
case class InsertResponse(success: Boolean, message: String)
我的操作 returns JSON 看起来像:
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)
}
)
}
所以我想捕获 insertResultFut 调用可能抛出的某些异常,因为它调用了插入数据库的光滑数据库层。
我想防止在用户电子邮件重复时抛出的 PSQLException,如何使用 futures 捕获此错误?
如果出现异常,并且它是重复键的 PSQLException,我想捕获它并将我的 InsertResponse 成功标志设置为 false 等。
想法?
在这种情况下您可以使用 Future#recover
:
insertResultFut.recover {
case exe: PSQLException if exe.getMessage.contains("duplicate") => BadRequest(InsertResponse(false, "duplicate").toJson)
}