JSON 使用 Http AKKA 和大小写的响应 类

JSON response with Http AKKA and case classes

我想使用 Http AKKA 构建一个具有多个路由的简单存根服务器。 我有以下情况 class:

  case class Person(name: String, age: Int)

  object Person {
    implicit def cardJsonFormat: RootJsonFormat[Person] = jsonFormat2(Person.apply)
  }

我如何 return 这种情况 class 作为 JSON 回应。

我的路线如下:

  case class Person(name: String, age: Int)

  def route =
    get {
      path("person") {
        complete {

        }
      }
    }

你应该尝试这样的事情:

import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import akka.http.scaladsl.server.Directives._
import spray.json.DefaultJsonProtocol

case class Person(name: String, age: Int)

case object Person extends SprayJsonSupport with DefaultJsonProtocol {
  implicit val personFormat = jsonFormat2(Person.apply)
}

object PersonRoute {
  val route =
    get {
      path("person") {
        complete {
          Person("Pawel", 25)
        }
      }
    }
}

可以在 docs.

中找到更多详细信息和示例

我发现以下库 akka-http-json used with json4s 很有用。它帮助我减少了 jsonFormatX 语句的数量。每个需要编组/解组的数据类型都需要每个 jsonFormatX 语句。

只需在需要编组/解组的地方混合以下特征:

import de.heikoseeberger.akkahttpjson4s.Json4sSupport
import org.json4s.jackson

trait JsonCodec extends Json4sSupport {

  import org.json4s.DefaultFormats
  import org.json4s.ext.JodaTimeSerializers

  implicit val serialization = jackson.Serialization
  implicit val formats = DefaultFormats ++ JodaTimeSerializers.all
}