Gson 序列化 Spring beans

发布于 2024-11-07 04:08:49 字数 832 浏览 4 评论 0 原文

我正在使用 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 生成我期望的输出?

I am using Gson 1.6 and Spring Framework 3.0 for a Java web app on WebSphere 6.1. I have some Spring beans for which the actual instance is a CGLIB proxy. When I attempt to serialize these beans via Gson, the non-primitive properties of the class are not serialized. Instead I get something like:

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

where I was expecting something more like

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

When I serialize a non-proxied POJO, the output is exactly as I'd expect. How can I get Gson to generate the output I expect?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

滿滿的愛 2024-11-14 04:08:49

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

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.

锦上情书 2024-11-14 04:08:49

我会考虑尝试另一个 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文