处理Play 2.5和ReactiveMongo

时间:2017-03-16 10:37:42

标签: scala reactivemongo play-reactivemongo

我编写了简单的rest API,将音乐曲目数据添加到mongodb。

我能够成功写入曲目,但是我想处理错误案例。

我的代码如下 -

  def saveTrack = Action.async(parse.json) { 
     import model.Track.trackFormat
     implicit request =>
    request.body.validate[Track].map { data =>
      trackService.save(data).onComplete {
        case Success(value) => Ok(Json.obj("message" -> Messages("track.save.ack")))
        case Failure(e) => Ok(Json.obj("message" -> Messages("track.save.nack")))
    }
    }
    Future.successful(Ok(Json.obj("message" -> Messages("track.save.fin"))))
  }

假设在trackService.save(data)中发生了一些故障,那么我想返回错误代码。我想知道如何实现这一点。

由于 彩

1 个答案:

答案 0 :(得分:1)

def saveTrack = Action.async(parse.json) { implicit request =>
    request
      .body
      .validate[Track]
      .map { data =>
        trackService.save(data).map { v =>
          Ok(Json.toJson(Json.obj("message" -> Messages("ack"))))
        }.recover {
          case _ =>
            Ok(Json.toJson(Json.obj("message" -> Messages("nack"))))
        }
      }.getOrElse {Future.successful(BadRequest(Json.obj("error" -> "bad json")))
    }
  }

如果json正文与您的模型不匹配,请使用recover来处理错误和getOrElse