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

GWT客户端:Java对象到json字符串,反之亦然,java,json,gwt,Java,Json,Gwt,这可能是一个重复的问题,但我还没有找到解决方案。 我有一些复杂的java对象,我想将其序列化为json字符串,然后我想将其从GWT客户端传递给Rest web服务。对于调用RESTWeb服务,我使用RequestBuilder类或RPC代理。 问题是我还没有找到将对象转换为json的解决方案 我试着使用AutoBean框架,但我在堆栈溢出的某个地方读到它有很多缺陷。我要转换的对象可以是任何内置的Java可序列化对象字符串、HashMap、ArrayList,也可以是自定义POJO对象。我正在进行

这可能是一个重复的问题,但我还没有找到解决方案。 我有一些复杂的java对象,我想将其序列化为json字符串,然后我想将其从GWT客户端传递给Rest web服务。对于调用RESTWeb服务,我使用RequestBuilder类或RPC代理。 问题是我还没有找到将对象转换为json的解决方案 我试着使用AutoBean框架,但我在堆栈溢出的某个地方读到它有很多缺陷。我要转换的对象可以是任何内置的Java可序列化对象字符串、HashMap、ArrayList,也可以是自定义POJO对象。我正在进行的项目非常大,我想要一个健壮的解决方案。 我试过这个

AutoBean<HashMap> bean = AutoBeanUtils.getAutoBean(myMap);
return AutoBeanCodex.encode(bean).getPayload();
AutoBean=AutoBeanUtils.getAutoBean(myMap);
返回AutoBeanCodex.encode(bean.getPayload();

这将返回空字符串

AutoBean可以序列化列表和映射,但是只有在您知道顶级接口的情况下

用JSON和GWT(据我所知)简单地序列化所有类型的可序列化文件是不可能的

GWT-RPC可以完成这项工作,因为它将在编译时生成代码,并且可以访问Java反射API


我不知道有哪种兼容GWT clientcode的JSON序列化程序能够序列化每个可序列化的对象。

在处理这个问题一段时间后 我最后想到的解决办法。 我使用GWT RPC代理调用rest服务。 在我的impl类中,我使用jackson序列化对象,而不是使用Jersey客户端API,我使用rest服务,然后再次反序列化响应并将其传递给客户端。这是迄今为止我能想到的最好的解决办法。Jackson和jersey是可用于制作的库。 这样我有两个优点。 1.我不必弄乱客户端代码。 2.可以进行跨域rest调用(SOP限制)

欢迎提出任何建议


希望这有帮助

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

除了所有对象类都应该使用的标准toString()之外,我还希望在每个类中使用一个名为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");
}

非常简单

您可以解决此问题。GSON将无法在Clientcode中工作。(如果在过去几个月内没有更改)@Braj As ChristianKuetbach已经提到GSon将不起作用。虽然bGWTGson也在后端使用RPC架构。但这将创建用于序列化的客户端-服务器通信。技术上,AutoBeans还可以在编译时生成代码,并使用反射来确定什么是可访问的/有意义的,但这进一步意味着rpc和AutoBeans都不能处理它们未被通知的任意对象。如果不编译所有可能的类型和所有字段元数据,就无法教gwt项目序列化任何任意对象子类。你可以编译所有这些,但它可能会严重膨胀编译后的应用程序大小。仅仅将链接发布到库中是没有帮助的!试着给出一个使用它的例子。