Sztuką jest, aby ustawić właściwą Content-Type:
Post("/api/authentication/signup",
HttpBody(MediaTypes.`application/json`,
"""{"email":"foo", "password":"foo" }""")
)
Ale to staje się jeszcze prostsze. Jeśli masz zależność sprayu-json, wtedy wszystko, co trzeba zrobić, to import:
import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
pierwszy import zawiera (ONZ) naziemnego które mogłyby przekształcić swój ciąg na żądanie json i nie trzeba zawinąć go w HttpEntity
z jawnym typem mediów.
Drugi import zawiera wszystkie formaty czytelników/zapisów Json dla typów podstawowych. Teraz możesz napisać tylko: Post("/api/authentication/signup", """{"email":"foo", "password":"foo:" }""")
. Ale jest jeszcze fajniej, jeśli masz do tego klasę przypadków. Na przykład Można zdefiniować case class Credentials
zapewniają jsonFormat
za to i używać go w testach/projekt:
case class Creds(email: String, password: String)
object Creds extends DefaultJsonProtocol {
implicit val credsJson = jsonFormat2(Creds.apply)
}
teraz w teście:
Post("/api/authentication/signup", Creds("foo", "pass"))
sprayu automatycznie Marshall to do wniosku Json jak application/json
wierzę to nie działa już z najnowszą wersją. Zamiast tego wykonaj: '' Post ("/ api/authentication/signup", HttpEntity (MediaTypes'application/json', "" "{" email ":" foo "," password ":" foo "}" ""))) '' ' –
@ GregaKešpret doskonale współpracuje z każdą wersją. Obecnie na sprayu 1.3.1 z akka 2.3.3 – 4lex1v
@AlexIv Gdzie znajduje się obiekt HttpBody? –