Finatra FeatureTests:如何手动反序列化返回的json

时间:2017-07-09 06:24:45

标签: finatra

我阅读了Finatra入门指南,我能够编写HelloWorld服务及其功能测试。

目前我的功能测试看起来像

server.httpPost(
   path = "/hi",
   postBody = """{"name": "Foo", "dob": 136190040000}""",
   andExpect = Ok,
   withBody = """{"msg":"Hello Foo. You are 15780 days old today"}""")

这很好用,我的测试通过了。但是我的要求是我提取服务器返回的json,然后在返回的对象上手动执行断言。

我将代码更改为

val response = server.httpPost(
   path = "/hi",
   postBody = """{"name": "Abhishek", "dob": 136190040000}""",
   andExpect = Ok,
   withBody = """{"msg":"Hello Abhishek. You are 15780 days old today"}""")
  val json = response.contentString

这也有效,我可以看到json在变量json中返回。

我的问题是,如果我必须将这个json反序列化为一个对象。我应该像circe一样拉入任何json库吗?然后反序列化对象?

或者我可以使用Finatra内部的jackson框架。

在我能找到的所有例子中,我看到Finatra"自动"处理json序列化和反序列化。但在我的情况下,我想手动执行此操作。

1 个答案:

答案 0 :(得分:1)

您可以通过调用(使用您的示例)FinatraObjectMapper来使用server.mapper。如果你想在没有任何Finatra附件的情况下使用杰克逊图书馆的话,你可以使用杰克逊ObjectMapper

或者您可以导入不同的JSON库。如果您正在使用SBT,则可以将库限制为代码的某些区域,因此如果您只想在测试代码中使用circe,则可以将以下内容添加到build.sbt

"org.scalatest" %% "scalatest" % "2.2.6" % "test"