Chcę zaimplementować prosty serwer json REST przy użyciu aerozolu w Scala, który obsługuje następujących trasach:Napisz prosty serwer json REST przy użyciu aerozolu w Scala
GET /foo => return a list of case class objects in json format
POST /bar => read a json into a case class object and perform some computation
Mój podstawowy kod startowy jest następujący:
import spray.routing.SimpleRoutingApp
import spray.can.Http
import akka.actor.ActorSystem
import akka.actor.Props
import akka.io.IO
import scala.collection.JavaConversions
import com.fasterxml.jackson.databind.ObjectMapper
object SprayTest extends App with SimpleRoutingApp {
implicit val system = ActorSystem("my-system")
val mapper = new ObjectMapper
case class Foo(a: String, b: Int)
case class Bar(c: Long, d: String)
startServer(interface = "localhost", port = 8080) {
get {
path("foo") {
complete {
val c = listOfFoo()
mapper.writeValueAsString(c)
}
}
} ~ post {
path("bar") {
val bar: Bar = ???
complete {
"???"
}
}
}
}
}
dwóch najważniejszych otwartych kwestii z tym kodem, które znam są:
jestem w zależności od jacksona, ale od przeszukiwania sieci, wygląda na to, że spray powinien mieć wbudowaną obsługę szeregowania i deserializacji prostych obiektów typu case lub list obiektów case.
nie jestem pewien „najlepszy”, najbardziej idiomatyczne i zwięzły sposób, aby uzyskać zawartość z żądania POST i Marshall go do JSON tak, że mogę wykonać kilka obliczeń na obiekcie (s) Klasa przypadek
Czy ktoś zna najlepsze podejście? Czy istnieje sposób automatycznej synchronizacji, więc mogę wykonać komendę podobną do complete { caseObject }
i automatycznie przekonwertować ją na json (i na odwrót, definiując metodę POST)?
W języku 'spray-json' 1.3.3 impor można importować 'import spray.httpx.SprayJsonSupport._' – Core
Gangstead - Dziękuję bardzo! bardzo pomocne!!! – Briksins
Uważaj również na zamawianie/importowanie. –