2013-07-17 85 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()' –

相關問題