Json 如何使用akka http将未来的[源[…]封送到HttpResponse?

Json 如何使用akka http将未来的[源[…]封送到HttpResponse?,json,scala,marshalling,akka-stream,akka-http,Json,Scala,Marshalling,Akka Stream,Akka Http,我使用以下方法返回一个Future[Source[List[String]]](CSV文件的前两行): def-get(url:String,charset:String,delimiter:Char,quote:Char,escape:Char)={ val scanner=CsvParsing.lineScanner( 分隔符toByte, 托拜特先生, 托比特 ) val request=HttpRequest(GET,Uri(url)).withHeaders(`User-Agent`(

我使用以下方法返回一个
Future[Source[List[String]]]
(CSV文件的前两行):

def-get(url:String,charset:String,delimiter:Char,quote:Char,escape:Char)={
val scanner=CsvParsing.lineScanner(
分隔符toByte,
托拜特先生,
托比特
)
val request=HttpRequest(GET,Uri(url)).withHeaders(`User-Agent`(UserAgent))
Http(系统)
.singleRequest(请求)
.map{response=>
response.entity.withoutSizeLimit.dataBytes
.维亚马特(扫描仪)(左侧)
.map(行=>
row.map(bs=>
解码字符串(字符集)
)
)
.采取(2)
}
}
返回的
Future
将传递给
complete
,后者使用以下命令将其封送到一个JSON数组:

implicit val jsonStreamingSupport:JsonEntityStreamingSupport=EntityStreamingSupport.json()
但是,我想检查
响应
并返回不同的
HttpResponse
,如果它不是200。这样做的最佳方法似乎是在此方法中将
未来的[Source[…]]
封送到
HttpResponse
,然后其返回类型将是
HttpResponse


我该怎么做?或者有更好的方法吗?

好的,所以我最终用了一种不同的方法

Http(系统).singleRequest(请求)
.flatMap{response=>
响应。状态匹配{
案例状态代码。确定=>
val compression=CompressionChooser.choose(url、gzip、响应)
response.entity.withoutSizeLimit.dataBytes
.via(压缩、解码器、解码流)
.维亚马特(扫描仪)(左侧)
.map(0.map(0.decodeString(charset)))
.采取(2)
.runWith(水槽序号)
.map{rows=>
val json=json.toJson(行)
HttpResponse(
好的,
entity=HttpEntity(ContentTypes.application/json`,json.toString)
)
}
案例\=>未来成功的HttpResponse(StatusCodes.BadRequest,entity=“Error”)
}
}