Voglio realizzare un semplice server JSON REST utilizzando spruzzo in scala che supporta i seguenti itinerari:Scrivere un semplice server JSON REST utilizzando spruzzo in 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
Il mio codice di avviamento di base è la seguente:
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 {
"???"
}
}
}
}
}
Le due più importanti questioni aperte con questo codice che io sappia sono:
sono a seconda di Jackson, ma dalla ricerca sul Web, sembra che lo spray debba avere una sorta di supporto integrato per la serializzazione e la deserializzazione di semplici case o elenchi di oggetti del caso.
Non sono sicuro che il "migliore", più idiomatica e modo succinto per ottenere contenuti dalla richiesta posta e Marshall in JSON in modo che possa eseguire alcune calcoli sull'oggetto caso della classe (s)
Qualcuno conosce l'approccio migliore? C'è un modo per rendere automatico il marshalling, quindi posso eseguire qualcosa come complete { caseObject }
e convertire caseObject
automaticamente in json (e viceversa con la definizione del metodo POST)?
In 'spray-json' 1.3.3 impor importare 'importazione spray.httpx.SprayJsonSupport._' – Core
Gangstead - Grazie mille! molto utile!!! – Briksins
Attenzione anche all'ordine/importazione. –