不久前,我从 akka-http 切换到 http4s。我想做正确的基本事情之一——JSON 处理,特别是发送 JSON 响应。
我决定使用带有 ZIO 的 http4s 而不是猫,所以下面是 http 路由的样子:
import fs2.Stream
import org.http4s._
import org.http4s.dsl.io._
import org.http4s.implicits._
import scalaz.zio.Task
import scalaz.zio.interop.catz._
import io.circe.generic.auto._
import io.circe.syntax._
class TweetsRoutes {
case class Tweet(author: String, tweet: String)
val helloWorldService = HttpRoutes.of[Task] {
case GET -> Root / "hello" / name => Task {
Response[Task](Ok)
.withBodyStream(Stream.emits(
Tweet(name, "dummy tweet text").asJson.toString.getBytes
))
}
}.orNotFound
}
如您所见,JSON 序列化部分非常冗长:
.withBodyStream(Stream.emits(
Tweet(name, "dummy tweet text").asJson.toString.getBytes
))
有没有其他方法可以在响应中发送 JSON?