Je voulais utiliser Alpakka pour gérer le téléchargement et le téléchargement de S3 avec Akka Steams. Cependant, je suis resté coincé avec l'utilisation de Source produite par S3Client dans les routes Akka Http. Le message d'erreur que je reçois est:Achèvement de la source [ByteString, _] dans Akka-Http
[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 qu'il est quelque chose trivial ennuyeux, comme manquer l'importation implicite, mais je n'a pas pu localiser avec précision ce que je suis absent.
J'ai créé quelques exemples minimum pour illustrer la question:
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"
Plus spécifiquement, 'HttpEntity.Default'. "Il a une longueur connue et présente ses données en tant que Source [ByteString]". –
Merci! J'ai été troublé par le deuxième paragraphe de http://doc.akka.io/docs/akka-http/10.0.9/scala/http/routing-dsl/source-streaming-support.html. J'ai (mis) compris qu'il y a une conversion implicite qui me manque. –
Je vois. Des implicits supplémentaires ne sont nécessaires que si vous souhaitez diffuser directement des classes personnalisées, en les convertissant en JSON sous le capot. –