我正在使用Scalatra为一些JSON restful API编写测试,片段如下所示
class MyScalatraServletTests extends ScalatraSuite with FunSuite {
test("An valid request should return 200") {
get ("/rest/json/accc/B1Q4K3/1") {
status should equal (200)
body should include ("TEST")
}
}
}
预期的 body 是由Scalatra通过其JSON支持序列化的JSON。我的问题是如何将 body 转换回scala中的相同case类实例,并大大简化测试?
答案 0 :(得分:2)
json4s可以直接用于从JSON值中提取案例类。
import org.json4s._
import org.json4s.jackson.JsonMethods._
val parsedBody = parse(body)
parsedBody.extract[MyCaseClass]
您还可以使用类似XPath的表达式查询JSON。
val parsedBody = parse(body)
val email = (parsedBody \ "user" \ "email").values
email should be ("example@example.org")
您可以从.values
调用String
来获取原始Scala值(Int
s,JValue
等)(JSON文档的json4s内部表示)
有关所有这些内容的示例,请参阅json4s introduction。
答案 1 :(得分:0)
我不确定您使用的是哪个JSON序列化程序或原始类的结构,但如果您想将JSON反序列化为Scala,我建议使用Jackson Scala模块: