2012-01-08 9 views

答えて

2

私はMapSerialisationインタフェースを使用して前にこれをやった:

interface MapSerialisation { 
    Map<String, Object> toMap(); 
    void fromMap(Map<String, Object>); 
} 

は、あなたのモデルオブジェクトのそれぞれにそれを実装し、翻訳のためにそれを使用します。

私が使用した別の方法は、Google Collectionsのトランスフォーマーで、JavaオブジェクトとJavascriptが望む構造体の間で変換するモデル変換関数を使用することです。

私はおそらくジャクソンを使ってJSONにシリアル化したいと思うでしょう。

0

リフレクションは、これを行う最も論理的な方法です。クラスのGetMethods/Fieldsは、技術的には全く反映されていないと主張する人もいます。

これを行う1つの方法は、オブジェクトのハッシュテーブル/マップを明示的に作成できるtoHash()関数を実装することです。

3

GWTには、反射の代わりにDeferred Bindingというメカニズムが付属しています。通常、このAPIはGWT.create(Class<?>)を呼び出すだけで使用できますが、GWTコンパイルプロセス中に呼び出されるコードジェネレータ(Java-to-Javascriptトランスレーション)を記述するためにも使用できます。

fromMap()のメソッドを含むヘルパークラスをPOJOクラスのいずれかに出力するコードジェネレータを作成することができます。 GWTは、JClassType,JMethodなどのクラスを持つJavaのリフレクションAPIに似たAPIを提供しています。これらは、getterとsetterのクラス(コードを生成したい)をクエリし、上記のメソッドを生成するために使用できますそれに応じて。

あなたのクライアントコードは、基本的に次のようになります。

Pojo1 pojo1 = ...; 
// Pojo1Transformer is the class that is generated for your domain class Pojo1 
Pojo1Transformer pojo1Transformer = GWT.create(Pojo1Transformer.class); 
Map<String, Object> pojo1AsMap = pojo1Transformer.toMap(pojo1); 
... 
pojo1AsMap.put(Pojo1Transformer.NAME, "New Name"); 
Pojo1 changed = pojo1Transformer.fromMap(pojo1AsMap); 
関連する問題