Je veux utiliser akka-http
et le nouveau mongo-scala-driver
pour mon service de repos.Travailler avec akka-http et mongo-scala-driver
Ce code fonctionne
val routes = {
pathPrefix("info") {
pathEndOrSingleSlash {
get {
val mongoClient: MongoClient = MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0")
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("test")
val future = collection.find().limit(10).toFuture()
val list = Await.result(future, Duration(10, TimeUnit.SECONDS))
complete(list.map(_.toJson()))
}
}
}
}
Mais je veux supprimer le code de blocage Await.result
et écriture asynchrone.
Comment puis-je le faire? Merci
build.sbt:
scalaVersion := "2.12.1"
"org.mongodb.scala" %% "mongo-scala-driver" % "1.2.1"
"com.typesafe.akka" %% "akka-http-core" % "10.0.4"
"com.typesafe.akka" %% "akka-http" % "10.0.4"
MISE À JOUR
Si je change mon code:
complete(future.map(_.toJson()))
Je reçois une erreur:
Error:(160, 36) value toJson is not a member of Seq[org.mongodb.scala.Document]
complete(future.map(_.toJson()))
MISE À JOUR
Si je change mon code:
onComplete(future) {
case Success(value) => complete(value)
case Failure(ex) => complete((InternalServerError, s"An error occurred: ${ex.getMessage}"))
}
Je reçois en erreur:
Error:(166, 47) type mismatch;
found : Seq[org.mongodb.scala.bson.collection.immutable.Document]
required: akka.http.scaladsl.marshalling.ToResponseMarshallable
case Success(value) => complete(value)
Quelque chose comme feature.onComplete? http://doc.akka.io/docs/akka/2.4.4/scala/http/routing-dsl/directives/future-directives/onComplete.html – Ashalynd
Si je change mon code, j'obtiens une erreur: Erreur :(166, 47) incompatibilité de type; trouvé: Seq [org.mongodb.scala.bson.collection.immutable.Document] requis: akka.http.scaladsl.marshalling.ToResponseMarshallable case Succès (valeur) => complet (valeur) – bobinshtein
Ou vous pouvez utiliser http: //reactivemongo.org/releases/0.12/documentation/ – cchantep