我正在使用GSON注释将JSON字段从一个宁静的服务解析为DTO。我想编写一个测试,它将检测JSONObject中是否存在尚未解析为具有注释的Java DTO对象的任何字段。如果在服务器上他们添加了10个字段,我将无法知道这一点?如果所有字段都被解析为Java对象,有没有办法动态测试?
换句话说,我可以获取所有DTO字段的名称(包括注释信息),并比较JSON对象上的所有字段。所以我试图将DTO与JSONObject进行比较,看看我是否覆盖了所有内容。
答案 0 :(得分:1)
Gson本身没有这样的东西。 Java或JSON中的“Extra”字段将被忽略。 Java中但不存在于JSON中的字段设置为null
唯一的方法就是通过反射,或者在Gson使用自定义反序列化器进行反序列化时,或者使用Gson的JsonObject
类将JSON解析为JsonParser
并进行测试。
您需要从JsonObject
通过entrySet()
获取所有字段名称,使用Class.getDeclaredFields()
从Java类中获取所有字段名称,并比较这两个字段以查找哪些字段名称两者都不存在。