/ / Compléter la source [ByteString, _] dans Akka-Http - recherche, akka-http, akka-stream

Compléter la source [ByteString, _] dans Akka-Http - scala, akka-http, akka-stream

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 № 1

Vous devez créer un HttpEntity de la source, et lui donner un type de contenu.

complete(HttpEntity(ContentTypes.`application/json`, source))