JSON отговор с Http AKKA и case класове

Бих искал да създам прост сървър за пънове с няколко маршрута, използвайки 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 {

        }
      }
    }

person bashan    schedule 12.07.2016    source източник


Отговори (2)


Трябва да опитате нещо подобно:

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)
        }
      }
    }
}

Повече подробности и примери можете да намерите в документи.

person Paweł Jurczenko    schedule 12.07.2016
comment
Опитах това вече. Получавам тази грешка: Несъответствие на типа, очаквано: ToResponseMarshallable, действително: Лице. Някаква идея как да го реша? - person bashan; 13.07.2016
comment
Изглежда, че personFormat не е в обхвата на вашия маршрут. Можете ли да покажете пълен пример на вашия код? Можете да го поставите на pastebin/gist/и т.н. - person Paweł Jurczenko; 13.07.2016
comment
Пълният пример е същият като показания тук. В този пример той казва, че: SprayJsonSupport не е намерен. - person bashan; 13.07.2016
comment
Добавихте ли зависимост към "com.typesafe.akka" %% "akka-http-spray-json-experimental" % "2.4.8".? - person Paweł Jurczenko; 13.07.2016
comment
Току-що го добавих и изглежда, че работи чудесно. Благодаря. - person bashan; 13.07.2016

Намерих следната библиотека https://github.com/hseeberger/akka-http-json, използвана с json4s полезен. Помага ми да намаля броя на jsonFormatX изявления. Всеки израз jsonFormatX е необходим за всеки тип данни, който трябва да бъде маршалиран/немаршалиран.

Просто смесете следната характеристика, където трябва да се появи marshall / unmarshall:

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
}
person neowulf33    schedule 12.07.2016