GWT客户端:Java对象到json字符串,反之亦然

时间:2014-03-14 19:58:16

标签: java json gwt

这可能是一个重复的问题,但我还没有找到解决方案。 我有一些复杂的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();

这是返回空字符串

3 个答案:

答案 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");
}

很简单!