0
私は、ユーザインタフェースから提供されるModelオブジェクトを取り込むPlayコントローラを持っています。このモデルオブジェクトは、私がデータベースに挿入しようとしているUserです。しかし、このユーザーをテーブルに挿入する前に、特定のEMailアドレスに対して既に存在する重複ユーザーが存在するかどうかを確認します。はいの場合はリクエストを拒否し、そうでない場合は挿入します。私はスリックとプレイフレームワークを使用していますし、ここに私のコントローラのコードは次のとおりです。Play Frameworkコントローラ複数の未来を処理する
def registerNewUser(user: User) = {
dbService.registerNewUser(User.toUserRow(user))
.map(userID => Ok(Json.obj("status" -> "ok", "userId" -> userID)))
.recover { case ex => InternalServerError(Json.obj("error" -> s"${ex.getMessage}")) }
}
def createUser() = Action.async(parse.tolerantJson) { request =>
request.body.validate[User].fold(
errors => Future.successful {
BadRequest(Json.obj("status" -> "error", "message" -> JsError.toJson(errors)))
},
user => {
val userExists: Future[Boolean] = dbService.userExists(user.email)
userExists.map(value => {
if (value) UnprocessableEntity(Json.obj("status" -> "error", "message" -> s"user with email ${user.email.toString} already exists"))
else registerNewUser(user)
}).recover {
case ex => InternalServerError(Json.obj("error" -> s"${ex.getMessage}"))
}
} // compilation failure on this line [[ Line X ]]
)
}
私は、このアプローチに何か問題が表示されていないが、私のコンパイラが幸せではありません。それは次のようにX線で苦情を申し立てます:
Expression of type Future[Object] does not confirm to the expected type _X
ここで実際に何が問題になりますか?
私はバックエンドサービスを変更して、重複したユーザーと1人での挿入を確認しました。とにかく、提案のおかげで! – sparkr