使用Scala Dispatch消耗和API相同的方法有两个不同的JSON

时间:2015-07-02 12:55:07

标签: scala json4s

我正在使用REST API,当调用正常时,此API返回200 OK Header,然后在正文中它可以处理两个不同的JSON

LogComplaint

或者,如果数据发送正确,则返回

Manifest

问题是,如果我使用json4s,我必须知道要使用哪个case类,我应该怎么做,使用{"Error": { "code" = 1 "msg" = "some error message" } } ,将JValue转换为String并检查是否包含Error然后Left(Error) o其他权利(代码),我应该采取哪种解决方案。我正在寻找一个好的解决方案,也许正确的解释。

我的aprrocach的问题是Dispatch给了我{"code" : { "status" = "Your submission is ..." "msg" = "It is happy" "answer" = {...} } 所以最后我会得到[String,[Error,Code]],它似乎不是一个好对象

1 个答案:

答案 0 :(得分:0)

我建议您使用中间JValue(JObject)检查错误情况,而不是String包含并使用Try和密封特征简化您的类型。

  1. 使用future onComplete来获取从dispatch返回的Try类型。
  2. 使用JValue中的JObject来检查错误字段。
  3. 添加一个新的密封特征,如ApiFooResponse,并在两个案例类中扩展该特征。
  4. 有条件地返回通过Try。
  5. 映射的特定案例类转换

    这将避免String转换并将类型简化为Try [ApiFooResponse]。如果我做了任何错误的假设,请纠正我。