这可能是一个重复的问题,但我还没有找到解决方案。 我有一些复杂的java对象,我想将它序列化为json字符串,然后我想将它从GWT客户端传递给Rest Web服务。对于调用其他Web服务,我使用的是RequestBuilder类或RPC代理。 问题是我还没有找到将Object转换为json的解决方案 我尝试使用AutoBean框架,但我已经在堆栈溢出的某个地方读过它非常错误。我想要转换的Object可以是任何内置的Java serialize able对象String,HashMap,ArrayList,也可以是自定义的POJO对象。我正在进行的项目非常庞大,我想要一个强大的解决方案。 我试过这个
AutoBean<HashMap> bean = AutoBeanUtils.getAutoBean(myMap);
return AutoBeanCodex.encode(bean).getPayload();
这是返回空字符串
答案 0 :(得分:0)
只有拥有您知道的顶级界面时,AutoBean才能序列化列表和地图,但。
使用JSON和GWT(据我所知),无法简单地序列化所有类型的序列化。
GWT-RPC可以完成这项工作,因为它会在编译时生成代码并且可以访问Java-Reflection API。
我不知道任何GWT客户端代码兼容的JSON序列化程序能够序列化每个Serializable
对象。
答案 1 :(得分:0)
经过一段时间的努力 我最终想到的解决方案。 我使用GWT RPC代理来调用休息服务。 在我的impl类中,我使用jackson来序列化对象而不是使用Jersey客户端API我正在使用休息服务,而不是再次反序列化响应并将其传递给客户端。这是我能想到的最好的解决方案。杰克逊和球衣是生产就绪的图书馆。 这样我有两个好处。 1.我不必弄乱客户端代码。 2.可以进行跨域休息呼叫(SOP限制)。
欢迎任何建议。
希望这有帮助
答案 2 :(得分:0)
我已经看到使用此库的最成功和最少量的代码:
https://code.google.com/p/gwtprojsonserializer/
除了标准的toString(),你应该拥有所有的Object类,我在每个我想要“JSONable”的类中都有一个叫做toJsonString()的东西。注意,每个类必须扩展JsonSerializable,它随库一起提供:
public String toJsonString()
{
Serializer serializer = (Serializer) GWT.create(Serializer.class);
return serializer.serializeToJson(this).toString();
}
要将JSON字符串转换回对象,我将静态方法放在同一个类中,重新创建类本身:
public static ClassName recreateClassViaJson(String json)
{
Serializer serializer = (Serializer) GWT.create(Serializer.class);
return (ClassName) serializer.deSerialize(json, "full.package.name.ClassName");
}
很简单!