Gson序列化Spring bean

时间:2011-05-12 15:23:29

标签: json spring serialization gson cglib

我在Gson上使用Spring Framework 1.6和WebSphere 6.1 3.0用于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生成我期望的输出?

2 个答案:

答案 0 :(得分:5)

我说你的问题是一种不良做法的结果。

Spring Bean通常由行为定义,而不是状态。而且你应该只序列化具有State而不是行为的类。

重构您的代码,将状态从Beans传输到Value Objects,然后序列化它们。

答案 1 :(得分:1)

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