2

我将Gson 1.6 和Spring Framework 3.0 用于WebSphere 6.1上的 Java Web 应用程序。我有一些 Spring bean,其实际实例是CGLIB代理。当我尝试通过 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 Beans 通常由行为定义,而不是状态。你应该只序列化有状态的类,而不是行为。

重构您的代码,将状态从 Bean 转移到值对象,然后将它们序列化。

于 2011-05-12T15:39:25.380 回答
1

我会考虑尝试另一个 JSON 处理器,Jackson (http://jackson.codehaus.org),因为它支持处理 cglib 代理对象。与基于 gson 的版本相比,Spring 支持 Jackson,因此您编写的代码更少。

于 2011-05-13T21:33:08.630 回答