【发布时间】:2018-03-16 06:13:07
【问题描述】:
我有以下方法返回Future[Source[List[String]]](CSV 文件的前两行):
def get(url: String, charset: String, delimiter: Char, quote: Char, escape: Char) = {
val scanner = CsvParsing.lineScanner(
delimiter.toByte,
quote.toByte,
escape.toByte
)
val request = HttpRequest(GET, Uri(url)).withHeaders(`User-Agent`(UserAgent))
Http(system)
.singleRequest(request)
.map { response =>
response.entity.withoutSizeLimit.dataBytes
.viaMat(scanner)(Keep.left)
.map(row =>
row.map(bs =>
bs.decodeString(charset)
)
)
.take(2)
}
}
返回的Future 被传递给complete,后者使用以下方法将其编组为 JSON 数组数组:
implicit val jsonStreamingSupport: JsonEntityStreamingSupport = EntityStreamingSupport.json()
但是,我想检查 response 并返回不同的 HttpResponse,如果它不是 200。似乎最好的方法是将 Future[Source[...]] 编组为 @987654329 @ 在这个方法中,然后它的返回类型将是HttpResponse。
我该怎么做?还是有更好的办法?
【问题讨论】:
标签: json scala marshalling akka-stream akka-http