Il trucco è quello di impostare la corretta Content-Type:
Post("/api/authentication/signup",
HttpBody(MediaTypes.`application/json`,
"""{"email":"foo", "password":"foo" }""")
)
Ma diventa ancora più semplice. Se si dispone di una dipendenza spray-JSON, allora tutto quello che dovete fare è di importazione:
import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
la prima importazione contiene (un) marshaller che convertire la stringa in richiesta di JSON e non c'è bisogno di avvolgere in HttpEntity
con tipo di supporto esplicito.
la seconda importazione contiene tutti i formati di lettori/scrittori Json per i tipi di base. Ora puoi scrivere solo: Post("/api/authentication/signup", """{"email":"foo", "password":"foo:" }""")
. Ma è ancora più bello se hai qualche case case per questo. Per es. è possibile definire un case class Credentials
, fornire jsonFormat
per questo e usarlo nei test/progetto:
case class Creds(email: String, password: String)
object Creds extends DefaultJsonProtocol {
implicit val credsJson = jsonFormat2(Creds.apply)
}
ora in prova:
Post("/api/authentication/signup", Creds("foo", "pass"))
spruzzo automaticamente Marshall nella richiesta JSON come application/json
credo questo non funziona più con l'ultima versione. Invece, fai questo: '' 'Post ("/api/authentication/signup ", HttpEntity (MediaTypes.application/json'," "" {"email": "foo", "password": "foo"} " ""))) '' ' –
@ GregaKešpret, funziona perfettamente con qualsiasi versione. Attualmente su spray 1.3.1 con akka 2.3.3 – 4lex1v
@AlexIv Dove si trova l'oggetto HttpBody? –