Scala Akka http-写入响应输出流

Scala Akka http-写入响应输出流,scala,akka-http,Scala,Akka Http,我需要创建一个大的制表符分隔文件作为对HTTP GET请求的响应。 在我的路径a中,创建一些Scala对象,然后我想将这些对象的一些自定义表示写入输出流 这不仅仅是序列化到tab-separated而不是JSON,因为我还需要创建一个带有列名的标题,所以IMHO无法通过自定义封送来解决这一问题 那么,如何从HttpRequest中获取writer或outputstream呢 差不多 ~path("export") { get { val sample

我需要创建一个大的制表符分隔文件作为对HTTP GET请求的响应。 在我的路径a中,创建一些Scala对象,然后我想将这些对象的一些自定义表示写入输出流

这不仅仅是序列化到tab-separated而不是JSON,因为我还需要创建一个带有列名的标题,所以IMHO无法通过自定义封送来解决这一问题

那么,如何从HttpRequest中获取writer或outputstream呢

差不多

 ~path("export") {
        get {
              val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
              val writer = HttpResponse().getWriter // this does not exists
              writeHeader(writer)
              ... // write objects tab separated
        }
   }
get {
  val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
  val headers: String = ???
  Source.single(headers).concat(Source(sampleExonRPKMs).map(_.toTSVLine)).intersperse("\n").map(ByteString.apply)
}

您可以使用可封送的源完成Akka HTTP路由。如果您不想使用自定义封送拆收器,则始终可以使用源代码[ByteString,\u0]来完成。有关更多信息,请参阅

你的路线看起来像

 ~path("export") {
        get {
              val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
              val writer = HttpResponse().getWriter // this does not exists
              writeHeader(writer)
              ... // write objects tab separated
        }
   }
get {
  val sampleExonRPKMs = exonRPKMService.getRPKMs(samples)
  val headers: String = ???
  Source.single(headers).concat(Source(sampleExonRPKMs).map(_.toTSVLine)).intersperse("\n").map(ByteString.apply)
}

另请注意:如果您处理的是大量数据,则getRPKMs调用将导致将所有数据加载到内存中。

此代码在编组时创建我异常:org.json4s.package$MappingException:Unexpected type info annotatedTypeRefTypeNoPrefixtype,TypeSymbolT,owner=0,flags=12100,info=33,List,List40