Я хочу реализовать простой json-сервер REST, используя спрей в 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
Мой основной код стартера следующий:
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 {
"???"
}
}
}
}
}
Две самые важные проблемы с открытым кодом, которые я знаю, следующие:
-
Я в зависимости от jackson, но от поиска в Интернете кажется, что спрей должен иметь некоторую встроенную поддержку для сериализации и десериализации простых объектов объекта или списков объектов case.
-
Я не уверен, что "лучший", самый идиоматичный и лаконичный способ получить контент из почтового запроса и перевести его в json, чтобы я мог выполнять некоторые вычисления на объекте класса case
Кто-нибудь знает лучший подход? Есть ли способ сделать автоматизацию маршаллинга, поэтому я могу выполнить что-то вроде complete { caseObject }
и преобразовать caseObject
в json (и наоборот с помощью метода POST)?