【问题标题】:JSON response with Http AKKA and case classes带有 Http AKKA 和案例类的 JSON 响应
【发布时间】:2016-11-14 13:18:17
【问题描述】:

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

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

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

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

我的路线如下:

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

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

        }
      }
    }

【问题讨论】:

    标签: json scala case-class akka-http


    【解决方案1】:

    你应该试试这样的:

    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找到。

    【讨论】:

    • 我已经试过了。我收到此错误:类型不匹配,预期:ToResponseMarshallable,实际:Person。知道如何解决吗?
    • 看起来personFormat 不在您的路由范围内。你能展示一个完整的代码示例吗?你可以把它放在 pastebin/gist/etc.
    • 完整示例与此处显示的相同。在这个例子中它告诉我们:SprayJsonSupport is not found.
    • 你是否添加了对"com.typesafe.akka" %% "akka-http-spray-json-experimental" % "2.4.8".的依赖?
    • 刚刚添加它,它似乎工作得很好。谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多