Gson 序列化 Spring beans
我正在使用 Gson 1.6 和 Spring Framework 3.0,用于 WebSphere 6.1。我有一些 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 生成我期望的输出?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想说你的问题是不良做法的结果。
Spring Bean 通常由行为而不是状态来定义。并且您应该只序列化具有状态而不是行为的类。
重构您的代码,将状态从 Bean 传输到值对象,然后将它们序列化。
I'd say your problem is the result of a bad practice.
Spring Beans are usually defined by behaviour, not state. And you should only serialize Classes that have State, not behaviour.
Refactor your code, transfer the state from the Beans to Value Objects, and serialize those.
我会考虑尝试另一个 JSON 处理器 Jackson (http://jackson.codehaus.org),因为它对处理 cglib 代理对象有一些支持。而且 Spring 支持 Jackson,因此与基于 gson 的版本相比,您需要编写的代码更少。
I would consider trying out another JSON processor, Jackson (http://jackson.codehaus.org), since it has some support for dealing with cglib proxied objects. And Spring supports Jackson so you have less code to write, compared to gson-based version.