2016-04-01 26 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) 

} 
相關問題