如何在akka-Http中返回JSON而不是Case类

时间:2019-03-31 03:23:10

标签: json scala akka-stream akka-http

我创建了一条路由,以流式传输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

2 个答案:

答案 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)
}