2016-04-01 20 views
1

Scala Play ve Slick'te, veritabanında bir kayıt oluşturulduktan sonra bir OK yanıtı göndermek istiyorum, şu ana kadar:Scala Oynat ve Slick'te, yanıt göndermeden önce bitirme isteği nasıl alınır

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")) 
     } 
    ) 
    } 
    } 

Ve Service.Create yöntemi içinde : Şu anda, OK yanıtı hiçbir yeni öğe oluşturulduğunda bile gönderilen olsun

def create(item: Item): Future[Unit] = { 
    exists(item.id).map { 
     case true => 
     case _ => db.run(Item.table += cc) 
    } 
    } 

. Bir öğe oluşturulduğunda sadece OK'e dönmesini istiyorum. Öğe zaten mevcutsa veya başka hatalar varsa (ör. Veritabanı hataları), createItem yöntemi ne tür bir sorun oluştuğunu bilmeli ve Hata iletisi ile bir Sorun sonucunu döndürmelidir.

cevap

0

bu deneyin: -

hizmet için

,

kontrolörü olarak
def create(item: Item): Future[Int] = { 
    exists(item.id).map { 
      case true => 0 
      case _ => db.run(Item.table += cc) 
     } 
} 

yöntemini değiştirmek, do

service.create(item).map { 
    case i:Int=> Ok.as(ContentTypes("DEFAULT")) 
}.recoverWith { 
    // To handle the error in the processing 
    case ex: Throwable => InternalServerError(ex) 

}