繁体   English   中英

带有Http AKKA和案例类的JSON响应

[英]JSON response with Http AKKA and case classes

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

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

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

如何返回此case类作为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中找到。

我发现以下与json4s一起使用的库akka-http-json很有用。 它可以帮助我减少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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM