2013-07-17 58 views
1

我正在使用GSON批注将JSON字段从宁静的服务解析到DTO中。我想编写一个测试,它将检测JSONObject中是否有任何字段尚未被解析到具有注释的Java DTO对象中。如果在服务器上添加十个字段,我将无法知道这一点?如果所有字段都被解析为Java对象,有什么方法可以动态地进行测试吗?换句话说,我可以得到所有DTO字段的名称(包括注释信息),并比较JSON对象上的所有字段。所以我试图将DTO与JSONObject进行比较,看看我是否覆盖了一切。如何检测是否所有的JSON字段都被解析?

回答

0

Gson本身并没有像这样的东西。 Java或JSON中的“额外”字段将被忽略。目前在Java,但不是在JSON字段设置为null

只有这样,你可以,所以这是通过反射,无论在GSON的反序列化与定制解串器或使用GSON的JsonParser类解析JSON的JsonObject,做你的测试。

你会需要通过entrySet()得到来自JsonObject的所有字段名,从Java类使用Class.getDeclaredFields()所有字段名和比较两组发现,哪些不是存在于两个。

+0

好的。我想我会试试这个。 getDeclaredFields()是否也返回注释信息?例如。 GSON的@SerializedName(“theNameInJSON”) \t public String theName; – gitright

+0

是的 - 如果你看看反射API,'Field'封装了关于该字段的所有内容,并具有'getDeclaredAnnotations()' –

相关问题