2016-04-01 24 views
1

在Scala Play和Slick中,我只希望在数据库中创建一条记录后发送OK响应,到目前为止我得到了:在Scala Play和Slick中,如何在发送回复之前完成请求

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

试试这个: -

对于服务,改变方法

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) 

} 
相关问题