诀窍是设置正确的 Content-Type:
Post("/api/authentication/signup",
HttpBody(MediaTypes.`application/json`,
"""{"email":"foo", "password":"foo" }""")
)
但它变得更加简单。如果你有一个 spray-json 依赖项,那么你需要做的就是导入:
import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
第一个导入包含(un)marshaller,它将您的字符串转换为 json 请求,您不需要HttpEntity
使用显式媒体类型将其包装。
第二个导入包含基本类型的所有 Json 读取器/写入器格式。现在你可以只写:Post("/api/authentication/signup", """{"email":"foo", "password":"foo:" }""")
. 但是,如果您为此提供了一些案例课程,那就更酷了。例如。您可以定义 a 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"))
Spray 自动将其编组为 Json 请求application/json