Конечная точка ZioHttp — вернуть ответ json

Я создаю конечную точку ZioHttp Rest...

Для запроса Json я хочу вернуть ответ Json...

Я могу повторно запускать журналы, печатать строки, но не знаю, как вернуть ответ json...

Вот мой код:

      import zio.{Console, _}
import zhttp._
import zhttp.http._
import zhttp.service.Server
import zio.json.{DeriveJsonEncoder, JsonEncoder}

//import java.io.Console


object ZioHttp extends ZIOAppDefault {


  val port = 9000


  val app: Http[Any, Nothing, Request, Response] = Http.collect[Request] {
    case Method.GET -> !! / "zioCollector" => Response.text("Hello, Http server This is Mohammed Mukhtar Ali!!")
  }

  case class Events(experimentId: String,
                    variantId: String,
                    accountId: String,
                    deviceId: String,
                    date: Int)

  object Events {
    implicit val encoder: JsonEncoder[Events] = DeriveJsonEncoder.gen[Events]
  }

  val zApp: UHttpApp = Http.collectZIO[Request] {
    case Method.POST -> !! / "zioCollector" =>
      Random.nextIntBetween(3, 5).map(n => Response.text("Hello " * n + "server2!"))
  }

  //  val zApp2: UHttpApp = Http.collectZIO[Request] {
  //    case Method.POST -> !! / "zioCollector" =>
  //      Random.nextIntBetween(3, 5).map(n => Response.json()
  //  }

  val combied = app ++ zApp


  val httpProgram = for {
    _ <- Console.printLine(s"Starting server at http://localhost:$port")
    _ <- Server.start(port, combied)
  } yield ()


  override def run = httpProgram

}

Я новичок в Zio и scala, буду рад любой помощи!

1 ответ

Не эксперт по zio-http (и вообще по zio), но этот код у меня работает:

      import zhttp.*
import zhttp.http.*
import zhttp.service.Server
import zio.json.*
import zio.Console
import zio.*



object ZioHttp extends ZIOAppDefault {

  val port = 9000

  case class Events(
    experimentId: String,
    variantId: String,
    accountId: String,
    deviceId: String,
    date: Int
  )

  object Events {
    implicit val encoder: JsonEncoder[Events] = DeriveJsonEncoder.gen[Events]
  }

  val exampleEvents =
    Events(
      "someExperimentId",
      "someVariantId",
      "someAccountId",
      "someDeviceId",
      42
    )

  val zApp: UHttpApp = Http.collectZIO[Request] {
    case Method.GET -> !! / "exampleEvents" =>
      ZIO.succeed(Response.json(exampleEvents.toJson))
  }


  val httpProgram = for {
    _ <- Console.printLine(s"Starting server at http://localhost:$port")
    _ <- Server.start(port, zApp)
  } yield ()


  override def run = httpProgram

}
Другие вопросы по тегам