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

} 

 Смежные вопросы

  • Нет связанных вопросов^_^