将GWT客户端对象序列化为String并在服务器上反序列化的方法?

时间:2011-11-23 22:07:51

标签: java json gwt serialization servlets

目前,我们的应用程序使用GWT-RPC进行大多数客户端 - 服务器通信。这种情况发生在我们需要自动生成图像的时候。我们基于许多参数生成图像,因此我们所做的是构建大型复杂网址,并通过get请求检索动态构建的图像。

如果我们能找到一种方法来在gwt客户端代码中序列化Java对象并在服务器端反序列化它们,我们可以使我们的URL更容易使用。而不是

http://host/page?param1=a&param2=b&param3=c....

我们可以

http://host/page?object=?JSON/XML/Something Magicical

并且在服务器上只有

new MagicDeserializer.(request.getParameter("object"),AwesomeClass.class);

我不关心json / xml中间格式是什么/我真的希望能够在我的gwt客户端代码和servlet中停止跟踪手动编组/解组参数。

2 个答案:

答案 0 :(得分:3)

使用AutoBean Framework。您需要的是简单的,并且都在http://code.google.com/p/google-web-toolkit/wiki/AutoBean

答案 1 :(得分:0)

我已经看到使用此库的最成功和最少量的代码:

https://code.google.com/p/gwtprojsonserializer/

除了标准的toString()之外,对于所有的Object类,我还要在每个我想要的类中使用所谓的toJsonString()" JSONable"。注意,每个类必须扩展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");
}

很简单!