使用Http AKKA和案例类的JSON响应

时间:2016-07-12 10:38:27

标签: json scala case-class akka-http

我想使用Http AKKA构建一个包含多个路由的简单存根服务器。 我有以下案例类:

nodemon server --harmony

如何将此案例类作为JSON响应返回。

我的路线如下:

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

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

2 个答案:

答案 0 :(得分:5)

你应该尝试这样的事情:

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

中找到

答案 1 :(得分:1)

我发现以下与akka-http-json一起使用的库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
}