У меня есть одна ошибка компиляции, которую я еще не могу решить. Речь идет о действии, добавляющем нового пациента в монго, если он еще не находится в базе данных. Первая модель:Play Scala Framework: введите несоответствие scala.concurrent.Future [Object] [error] required: scala.concurrent.Future [play.api.mvc.Result]
case class PatientData(id : String)
object PatientData {
implicit val PatientDataFormat = Json.format[PatientData]
}
Функция поиска пациента в Монго:
def findPatientById(mode : String, id : String) : Future[Option[PatientData]] = {
val collection = getPatientCollection(mode)
collection.find(Json.obj("id" -> id)).one[PatientData]
}
Действие Играть:
def create(patientId: String) = Action.async(parse.json) { request =>
val token = "dummy"
isAuthorized(token) match { // always return Some(thing)
case None => Future.successful(Unauthorized("Invalid token " + token))
case Some(_) =>
request.body.validate[PatientData] map {
patientData =>
findPatientById(mode,patientId) map { finded =>
finded match {
case Some(_) => Future.successful(NotAcceptable("The patient is already exist."))
case None =>
Logger.info("Create the patient .. ")
Future.successful(Created)
}
}
} getOrElse {
Future.successful(BadRequest)
}
}
Я знаю, что я могу решить эту проблему с помощью вызова Await.result
в функции findPatientById
, но я хочу избежать этого решения и позволить Future
выполнять свою работу. Проблема в том, что я получаю ошибку компиляции:
[error] /home/afk/git/bioserenity/bioserenity-backend/app/controllers/MedataController.scala:90: type mismatch;
[error] found : scala.concurrent.Future[Object]
[error] required: scala.concurrent.Future[play.api.mvc.Result]
[error] } getOrElse {
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
У кого-нибудь есть идея решить эту проблему?
Спасибо за исправление :) – alifirat