2011-05-12 48 views
2

我使用的是Gson 1.6和Spring Framework 3.0,用于在WebSphere 6.1上的Java web应用程序。我有一些Spring bean,其实际实例是CGLIB代理。当我尝试通过Gson序列化这些bean时,该类的非基元属性不会被序列化。相反,我得到的东西,如:Gson序列化Spring beans

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

,我期待更多的东西一样

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

当我序列非代理POJO,输出正是我所期待。我如何让Gson生成我期望的输出?

回答

5

我想说你的问题是一个不好的做法的结果。

春豆通常由行为而不是状态来定义。你只应该序列化具有状态的类,而不是行为。

重构您的代码,将状态从Beans转移到Value Objects并将其序列化。

+1

我同意你100%认为这不是最佳做法。我们序列化的99%实际上是VOs/DTOs ......不幸的是,作为一个更大团队的一部分,并非每个人都遵循相同的标准,而我无法控制,这样的事情确实发生了。我希望至少减轻这种伤害。 – Ray 2011-05-12 17:10:41

1

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