在Scala Play和Slick中,我希望只有在数据库中创建了一条记录后才发送OK响应,到目前为止我已经得到了:
def createItem = Action(BodyParsers.parse.json) {
request => {
val result = request.body.validate[Item]
result.fold(
invalid => {
val problem = new Problem(BAD_REQUEST, "Invalid Item JSON", invalid.toString)
returnProblemResult(BadRequest, problem)
},
item => {
service.create(item)
// TODO check for success before sending ok
Ok.as(ContentTypes("DEFAULT"))
}
)
}
}
在service.create方法中:
def create(item: Item): Future[Unit] = {
exists(item.id).map {
case true =>
case _ => db.run(Item.table += cc)
}
}
目前,即使没有创建新项目,也会发送OK响应。如果创建了一个项目,我希望它只返回OK。如果该项目已存在,或者存在其他错误(例如数据库错误),则createItem方法应该知道发生了什么类型的问题,并返回带有错误消息的问题结果。
答案 0 :(得分:0)
试试这个: -
对于服务,请将方法更改为
def create(item: Item): Future[Int] = {
exists(item.id).map {
case true => 0
case _ => db.run(Item.table += cc)
}
}
在控制器中,执行
service.create(item).map {
case i:Int=> Ok.as(ContentTypes("DEFAULT"))
}.recoverWith {
// To handle the error in the processing
case ex: Throwable => InternalServerError(ex)
}