繁体   English   中英

playframwork控制器返回创建对象的ID

[英]playframwork controller return ID of created object

在我的scala playframework应用程序中,我想返回我创建的项目的ID。

控制器代码

  def createClient = Action { implicit request =>
    request.body.asJson.map(_.validate[ClientModel] match {
      case JsSuccess(client, _) =>
        clientDTO.createClient(client).map{
          case cnt => println(cnt)
          case  _ => println("Fehler")
        }
      case err@JsError(_) => BadRequest("TEST")
      case _ => BadRequest("fail to create Counter")
    }).getOrElse(BadRequest("Failure tu create Counter"))
    Ok("s")
  }

DTO代码

  /**
    * Insert Query for a new Client
    */
  val insertClientQuery = clients returning clients.map(_.id) into ((client, id) => client.copy(id = Some(id)))

  /**
    * Creates a new client
    *
    * @param client Client Model
    * @return
    */
  def createClient(client: ClientModel): Future[ClientModel] = {
    val action = insertClientQuery += client
    db.run(action)
  }

ID的最佳用法,而不是返回“ OK”

谢谢

错误 在此处输入图片说明

新错误 在此处输入图片说明

新的 在此处输入图片说明

再一次 在此处输入图片说明

这样的事情(这将返回一个JSON对象)。 您也可以将整个客户端作为JSON对象返回。 同样,在这种情况下,HTTP 201(已创建)是更正确的响应。

def createClient = Action.async { implicit request =>
  request.body.asJson.map(_.validate[ClientModel]) match {
    case c: JsSuccess[ClientModel] =>
      clientDTO.createClient(c.get).map{
        cnt => Created(Json.obj("id" -> cnt.id))
      }.recover {
        case e: Exception => BadRequest("Could not create client")
      }
    case err: JsError => Future.successful(BadRequest("TEST"))
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM