I have defined a custom ToEntityMarshaller for type User. When requesting /users it returns an empty JSON array. Only when I remove the implicit def userMarshaller it return the correct representation of the stream.
Anybody has a pointer on what is going wrong? import akka.NotUsed import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.common.{EntityStreamingSupport, JsonEntityStreamingSupport} import akka.http.scaladsl.model.{HttpEntity, StatusCodes, _} import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller, ToResponseMarshaller} import akka.http.scaladsl.model.TransferEncodings.gzip import akka.http.scaladsl.model.headers.{HttpEncoding, HttpEncodings} import akka.http.scaladsl.model.ws.{Message, TextMessage} import akka.stream.scaladsl.{Flow, Source} import akka.util.ByteString import spray.json.DefaultJsonProtocol import spray.json.DefaultJsonProtocol._ import scala.concurrent.Future import scala.io.StdIn import scala.util.Random final case class User(name: String, id: String) trait UserProtocol extends DefaultJsonProtocol { import spray.json._ implicit val userFormat = jsonFormat2(User) val `vnd.example.api.v1+json` = MediaType.applicationWithFixedCharset("vnd.example.api.v1+json", HttpCharsets.`UTF-8`) implicit def userMarshaller: ToEntityMarshaller[User] = Marshaller.oneOf( Marshaller.withFixedContentType(`vnd.example.api.v1+json`) { organisation => HttpEntity(`vnd.example.api.v1+json`, organisation.toJson.compactPrint) }) } object ApiServer extends App with UserProtocol { implicit val system = ActorSystem("api") implicit val materializer = ActorMaterializer() implicit val executionContext = system.dispatcher implicit val jsonStreamingSupport: JsonEntityStreamingSupport = EntityStreamingSupport.json() .withParallelMarshalling(parallelism = 10, unordered = false) // (fake) async database query api def dummyUser(id: String) = User(s"User $id", id.toString) def fetchUsers(): Source[User, NotUsed] = Source.fromIterator(() => Iterator.fill(10000) { val id = Random.nextInt() dummyUser(id.toString) }) val route = pathPrefix("users") { get { complete(fetchUsers()) } } val bindingFuture = Http().bindAndHandle(route, "localhost", 8080) println(s"Server online at http://localhost:8080/\nPress RETURN to stop...") StdIn.readLine() bindingFuture.flatMap(_.unbind()).onComplete(_ => system.terminate()) } -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to akka-user+unsubscr...@googlegroups.com. To post to this group, send email to akka-user@googlegroups.com. Visit this group at https://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.