Je voulais utiliser Alpakka pour gérer le téléchargement S3 avec Akka Steams. Cependant, je me suis retrouvé coincé avec l'utilisation de Source produite par S3Client dans les routes Akka Http. Le message d'erreur que je reçois est le suivant:
[error] found : akka.stream.scaladsl.Source[akka.util.ByteString,_$1] where type _$1
[error] required: akka.http.scaladsl.marshalling.ToResponseMarshallable
[error] complete(source)
Je suppose que c'est une chose triviale ennuyeuse, comme manquer une importation implicite, mais je n'ai pas été capable de localiser ce qui me manque.
J'ai créé un exemple minimal pour illustrer le problème:
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Source
import akka.util.ByteString
import scala.concurrent.ExecutionContext
class Test {
implicit val actorSystem: ActorSystem = ActorSystem()
implicit val materializer: ActorMaterializer = ActorMaterializer()
implicit val executionContext: ExecutionContext = actorSystem.dispatcher
val route = (path("test") & get) {
def source: Source[ByteString, _] = ??? // just assume that I am able to get that value
complete(source) // here error happens
}
Http().bindAndHandle(route, "localhost", 8000)
}
Avez-vous des suggestions, que puis-je essayer? j'utilise
libraryDependencies += "com.typesafe.akka"%% "akka-http" % "10.0.5"
Réponses:
4 pour la réponse № 1Vous devez créer un HttpEntity
de la source, et lui donner un type de contenu.
complete(HttpEntity(ContentTypes.`application/json`, source))