我在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生成我期望的输出?
答案 0 :(得分:5)
我说你的问题是一种不良做法的结果。
Spring Bean通常由行为定义,而不是状态。而且你应该只序列化具有State而不是行为的类。
重构您的代码,将状态从Beans传输到Value Objects,然后序列化它们。
答案 1 :(得分:1)
我会考虑尝试另一个JSON处理器Jackson(http://jackson.codehaus.org),因为它有一些支持处理cglib代理对象。 Spring支持Jackson,因此与基于gson的版本相比,您可以编写更少的代码。