Хитрость заключается в том, чтобы установить правильный Content-Type:
Post("/api/authentication/signup",
HttpBody(MediaTypes.`application/json`,
"""{"email":"foo", "password":"foo" }""")
)
Но становится еще проще. Если у вас есть зависимость от spray-json, все, что вам нужно сделать, это импортировать:
import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
первый импорт содержит (не) маршаллер, который преобразует вашу строку в запрос json, и вам не нужно оборачивать ее в HttpEntity
с явным типом носителя.
второй импорт содержит все форматы чтения/записи Json для основных типов. Теперь вы можете написать просто: Post("/api/authentication/signup", """{"email":"foo", "password":"foo:" }""")
. Но еще круче, если для этого у вас есть класс case. Например вы можете определить case class Credentials
, предоставить для этого jsonFormat
и использовать его в тестах/проекте:
case class Creds(email: String, password: String)
object Creds extends DefaultJsonProtocol {
implicit val credsJson = jsonFormat2(Creds.apply)
}
сейчас в тесте:
Post("/api/authentication/signup", Creds("foo", "pass"))
спрей автоматически маршалирует его в запрос Json как application/json
person
4lex1v
schedule
25.09.2013