2

我正在使用 GSON 注释将 JSON 字段从 restful 服务解析为 DTO。我想编写一个测试来检测 JSONObject 中是否有任何字段尚未被解析为具有注释的 Java DTO 对象。如果他们在服务器上添加十个字段,我将无法知道这一点?如果所有字段都被解析为Java对象,有什么方法可以动态测试?

换句话说,我可以获取所有 DTO 字段的名称(包括注释信息),并比较 JSON 对象上的所有字段。所以我试图将 DTO 与 JSONObject 进行比较,看看我是否涵盖了所有内容。

4

1 回答 1

1

Gson 本身没有这样的东西。Java 或 JSON 中的“额外”字段会被忽略。Java 中存在但 JSON 中不存在的字段设置为null

唯一可以做到这一点的方法是通过反射,无论是在 Gson 使用自定义反序列化器进行反序列化期间,还是通过将 JSON 解析为JsonObject使用 Gson 的JsonParser类并进行测试。

您需要从JsonObjectvia 中获取所有字段名称entrySet(),使用 Java 类中的所有字段名称Class.getDeclaredFields()并比较这两个集合以找出两者中都不存在的那些。

于 2013-07-17T17:51:02.553 回答