我正在使用 playframework 2.6 和 play-slick 0.8.0。
动作代码:
def addCompany = Authenticated {
DBAction(parse.json) {
implicit rs => {
val newCompany = rs.request.body
val result = CompanyTable.insert(newCompany.as[Company])(rs.dbSession)
if(result > 0)
Ok("{\"id\":"+result+"}")
else
Ok("New company was not created.")
}
}
}
Action 是仅检查有效会话的 Action 和 DBAction 的组合,后者要求请求正文具有有效的 JSON 对象。
测试代码:
"should create a Company from a Json request" in new InMemoryDB {
val newCompany = Company(name = "New Company1")
val fr = FakeRequest(POST, "/company")
.withSession(("email", "bob@villa.com"))
.withHeaders(CONTENT_TYPE -> "application/json")
.withJsonBody(Json.toJson(newCompany))
val action = controllers.CompanyController.addCompany
val result = action(fr).run
status(result) should be_==(OK)
(contentAsJson(result) \ "id").as[Long] should be_>(1L)
}
InMemoryDB 类只是一个带有预填充内存数据库的 FakeApplication。
我遇到的问题是,当测试运行时,结果始终是 400,正文内容包含一条消息说 [Invalid Json]。当我使用具有相同 JSON 正文内容的 curl 调用服务时,它可以工作并返回 id。