おおよそ次のようなログインエンドポイントがあります
get {
(path("token") & parameters("email", "password")) { (email, password) =>
complete {
DBManager.getUserByEmail(email) match {
case Some(user) =>
// Check everything is return something
UserWire(user)
case None => StatusCodes.NotFound -> "User doesn't exist"
}
}
}
}
DBManager.getUserByEmail
戻りますOption[User]
。すべてが非同期である Slick に切り替えたところ、メソッドが を返すようになりFuture[User]
ました。
future が失敗した場合、希望する応答を送信するにはどうすればよいですか? 私はこれを試しました
complete {
DBManager.getUserByEmail(email).map(user => {
// Check everything is return something
UserWire(user)
}).recoverWith { case ex => Future.successful(StatusCodes.NotFound -> "User doesn't exist") }
}
でコンパイルに失敗します
Error:(497, 26) type mismatch;
found : scala.concurrent.Future[Product with Serializable]
required: akka.http.scaladsl.marshalling.ToResponseMarshallable
}).recoverWith { case ex => Future.successful(StatusCodes.NotFound -> "User doesn't exist") }
^
どうすれば修正できますか?