2

私は GSON アノテーションを使用して、安らかなサービスから DTO に JSON フィールドを解析しています。アノテーションを持つ Java DTO オブジェクトにまだ解析されていない JSONObject のフィールドがあるかどうかを検出するテストを書きたかったのです。サーバーに 10 個のフィールドが追加された場合、これを知る方法はありませんか? すべてのフィールドが Java オブジェクトに解析されているかどうかを動的にテストする方法はありますか?

別の言い方をすれば、すべての DTO フィールド (注釈情報を含む) の名前を取得し、JSON オブジェクトのすべてのフィールドを比較できますか。そのため、DTO と JSONObject を比較して、すべてを網羅しているかどうかを確認しようとしています。

4

1 に答える 1

1

Gson自体にはこのようなものはありません。Java または JSON の「余分な」フィールドは、黙って無視されます。Java には存在するが JSON には存在しないフィールドは、null

これを可能にする唯一の方法は、カスタム デシリアライザーを使用した Gson のデシリアライズ中、またはJsonObjectGson のJsonParserクラスを使用して JSON を解析し、テストを実行することによって、リフレクションを使用することです。

JsonObjectvia からすべてのフィールド名を取得し、2 つのセットをentrySet()使用して Java クラスからすべてのフィールド名を取得し、両方に存在しないものを見つける必要があります。Class.getDeclaredFields()

于 2013-07-17T17:51:02.553 に答える