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