我创建了一条路由,以流式传输JSON中的案例类列表。但是,如果我使用ByteString,则会打印case类而不是JSON
def streamRoute: Route = pathEndOrSingleSlash {
val byteString = new LocalFileParser(config).importFromFiles.map(phoneNumber => ByteString(phoneNumber.toString + "\n"))
complete(HttpEntity(ContentTypes.`application/json`, byteString))
}
// RESULT: PhoneNumber(+35799000123,Some(357),Some(Cyprus),Some(Cytamobile-Vodafone),Some(MOBILE))
如果我只是使用complete(new LocalFileParser(config).importFromFiles)
,那么这就是给我JSON。第二种方法是否适合流式处理分块响应?如果没有,我该如何解决第一种方法来返回JSON而不是Case Class
答案 0 :(得分:0)
使用Json.toJson(result)
方法,您可以将结果作为JSON发送,
您的情况如下:val byteString = new LocalFileParser(config).importFromFiles.map(phoneNumber => Ok(Json.toJson(phoneNumber)))
希望这会有所帮助
PS:可能是您要发送到那里的HTTP代码
答案 1 :(得分:0)
考虑到您已经在使用Circe,可以通过将该库添加到项目中来简化操作:
"de.heikoseeberger" %% "akka-http-circe" % "<latest-version>"
并导入这两个类以将您的List[PhoneNumber]
编组到包含json的HttpResponse
:
import de.heikoseeberger.akkahttpcirce.ErrorAccumulatingCirceSupport._
import io.circe.generic.auto._
def streamRoute: Route = pathEndOrSingleSlash {
complete(new LocalFileParser(config).importFromFiles)
}