Rest调用应该以相同的顺序返回对象和内部字段

时间:2015-04-23 16:05:14

标签: java json rest

我正在使用休息电话进行一些测试。 UI测试。 在调用rest调用之后,我希望它始终以相同的顺序返回对象中的字段。我能做些什么? 有assertEquals("一些字符串实际上是休息调用的o / p",actualString);在我的测试中。 但是在课堂上再添加一个字段后,我发现它有时会以不同的方式返回休息状态。 所以我希望在返回的json中有固定的字段顺序,如果我调用rest call。

我正在考虑在转换后的java对象上使用json转换和断言。 如下所示:

 Gson gson = new Gson();
  String json = gson.toJson(badIndicatorsdata7.getData());
  MyClass indicatorDto = gson.fromJson(json , MyClass.class);

但是我在这一行上遇到了异常

MyClass indicatorDto = gson.fromJson(json , MyClass.class);

java.lang.NoClassDefFoundError: Lcom/ideas/tetris/pacman/services/dateservice/dto/DateParameter;
at java.lang.Class.getDeclaredFields0(Native Method)
  at java.lang.Class.privateGetDeclaredFields(Class.java:2300)
  at java.lang.Class.getDeclaredFields(Class.java:1745)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:109)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
  at com.google.gson.Gson.getAdapter(Gson.java:349)
  at com.google.gson.Gson.fromJson(Gson.java:790)
  at com.google.gson.Gson.fromJson(Gson.java:757)
  at com.google.gson.Gson.fromJson(Gson.java:706)
  at com.google.gson.Gson.fromJson(Gson.java:678)
  at com.google.gson.Gson$fromJson.call(Unknown Source)

我希望下面的休息o / p始终保持相同的顺序

[
    {
        "happy": true,
        "social": false,
    }
]
快乐和社交不应该改变他们的秩序。他们是一种方式吗?

2 个答案:

答案 0 :(得分:0)

  快乐和社交不应该改变他们的秩序。他们是一种方式吗?

嗯,那只是一个JSON对象。很少(IME)订单应该重要 - 而这看起来并不像实际导致你看到的失败。

我建议为了测试目的,你有一些代码,给定两个JSON对象,将它们放入一些规范形式 - 但你的生产代码不应该关心物业发生的顺序......这将是非常脆弱的。

如果您真的关心订购,我建议您创建一个键/值对列表,而不仅仅是一个JSON对象。那意味着保持秩序。

要解决您实际看到的问题,但是,您似乎需要找到DateParameter的来源,并确保它在您的类路径中。

答案 1 :(得分:0)

使用Crockford的简单JSON java库。在解析字符串时,它将创建一个JSONObject的JSONArray,JSONObject有一个“类似”的方法(https://github.com/douglascrockford/JSON-java/blob/master/JSONObject.java#L1295),它将独立于JSON字符串中的顺序比较对象。