2

WebSphere6.1のJavaWebアプリにGson1.6SpringFramework3.0を使用しています。実際のインスタンスがCGLIBプロキシであるSpringBeanがいくつかあります。Gsonを介してこれらのBeanをシリアル化しようとすると、クラスの非プリミティブプロパティがシリアル化されません。代わりに、次のようになります。

{
   "CGLIB$BOUND":true,
   "CGLIB$CONSTRUCTED":true,
   "booleanProperty":true,
   "anotherBooleanProperty":true,
}

もっと似たようなものを期待していたところ

{
   "stringProperty":"stringValue"
   "integerObjectProperty":17,
   "booleanProperty":true,
   "anotherBooleanProperty":true,
}

プロキシされていないPOJOをシリアル化すると、出力は期待どおりになります。Gsonに期待する出力を生成させるにはどうすればよいですか?

4

2 に答える 2

5

あなたの問題は悪い習慣の結果だと思います。

Spring Beanは通常、状態ではなく動作によって定義されます。また、動作ではなく、状態を持つクラスのみをシリアル化する必要があります。

コードをリファクタリングし、状態をBeansからValue Objectsに転送し、それらをシリアル化します。

于 2011-05-12T15:39:25.380 に答える
1

別のJSONプロセッサであるJackson(http://jackson.codehaus.org)を試してみることを検討します。これは、cglibプロキシオブジェクトの処理をある程度サポートしているためです。また、SpringはJacksonをサポートしているため、gsonベースのバージョンと比較して、作成するコードが少なくて済みます。

于 2011-05-13T21:33:08.630 に答える