ses*_*ses 3 scala playframework-2.3
在路线:
POST /login controllers.ApplicationCtrl.login()
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def login = Action(parse.json) { implicit request => {
val email = (request.body \ "email").as[String]
val password = (request.body \ "password").as[String]
Ok(Json.toJson(
Map("status" -> "OK",
"message" -> "%s created".format(email))
))
}
Run Code Online (Sandbox Code Playgroud)
在测试中
"login" in new WithApplication{
val request = route( FakeRequest(
Helpers.POST,
controllers.routes.ApplicationCtrl.login.url,
FakeHeaders(Seq(CONTENT_TYPE -> Seq("application/json"))),
""" {"email" : "bob@mail.com", "password" : "secret"} """
)).get
status(request) must equalTo(OK)
}
Run Code Online (Sandbox Code Playgroud)
当我使用命令行测试时:
curl --header "Content-type: application/json" --request POST --data '{"email" : "bob@mail.com", "password" : "secret"}' http://localhost:9000/login
Run Code Online (Sandbox Code Playgroud)
它得到了理想的回应.
{"status":"OK","message":"bob@mail.com created"}
Run Code Online (Sandbox Code Playgroud)
但测试返回400错误.
怎么了?
(命令行测试通过简单性和可理解性获胜)
这里发生的是Play根据正文的类型设置请求的内容类型.您正在使用字符串正文,以便稍后覆盖您正在设置的内容类型标题text/plain; charset=utf-8.
因为你明确地解析人体为JSON如果内容类型不是身体解析器会返回一个错误的请求403 text/json或application/json.
在你的情况下最好的事情是使用一个Json体,即:
"login" in new WithApplication {
val request = route( FakeRequest(
POST,
controllers.portal.routes.Portal.test.url,
FakeHeaders(Seq.empty),
play.api.libs.json.Json.obj("email" -> "bob@mail.com", "password" -> "secret")
)).get
status(request) must equalTo(OK)
}
Run Code Online (Sandbox Code Playgroud)
请注意,通过让备用FakeRequest构造函数从调用中推断出您的操作的方法和URL,可以使其更简洁:
val request = route(FakeRequest(controllers.portal.routes.Portal.test)
.withBody(Json.obj("email" -> "bob@mail.com", "password" -> "secret"))).get
Run Code Online (Sandbox Code Playgroud)
您可以用作body参数及其内容类型映射的数据类型:
JsValue - > application/jsonNodeSeq - > text/xmlString - > text/plainMap[String, Seq[String]] - > application/x-www-form-urlencodedArray[Byte] - >什么都没有还可以选择使用tolerantJson作为正文解析器来完全跳过检查内容类型.
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |