Java 反序列化服务器响应

Java 反序列化服务器响应,java,http,gwt,Java,Http,Gwt,我想知道是不是反序列化服务器响应的方法。因此,在我的例子中,我有一个LinkedHashMap,并从服务器上重试: @Override public LinkedHashMap<String, Date> testHMap() { LinkedHashMap<String, Date> map = new LinkedHashMap<>(); map.put("AA", new Date()); map

我想知道是不是反序列化服务器响应的方法。因此,在我的例子中,我有一个
LinkedHashMap
,并从服务器上重试:

 @Override
    public LinkedHashMap<String, Date> testHMap() {
        LinkedHashMap<String, Date> map = new LinkedHashMap<>();
        map.put("AA", new Date());
        map.put("BB", new Date());

        return map;
    }
@覆盖
公共LinkedHashMap testHMap(){
LinkedHashMap=新建LinkedHashMap();
地图放置(“AA”,新日期());
地图放置(“BB”,新日期());
返回图;
}
我正在尝试获取关于另一个应用程序(gwt)的信息,以便只能通过HTTP执行调用,从上面的示例来看,HTTP响应如下:
//OK['WM577vZ',4,5,2,'WM577vZ',4,3,2,2,0,1,[“java.util.LinkedHashMap/3008245022”,“java.lang.String/2004016611”,“AA”,“java.util.Date/3385151746”,“BB”],0,7]


那么,有没有办法从这个HTTP响应获取LinkedHashMap数据呢?

我想您正在寻找类似restyGWT的东西


但是我不太理解你的问题,所以我可能错了。

我想你在寻找类似restyGWT的东西


但是我不太理解你的问题,所以我可能错了。

LinkedHashMap在该响应中-该响应是一个对象流(即,如果同一个值出现两次,它将只序列化一次,这使得内容更小,并且允许循环引用,而不仅仅是一个平面树)

读取RPC有效负载是“向后”完成的-从末尾开始向后读取,我们从7(版本)、0(设置的标志)开始,一大串字符串(“字符串表”,解码应答所需的字符串,因此每个字符串只列出一次)

然后是
1
-流中的第一个对象是字符串表中第一个条目的类型,即
“java.util.LinkedHashMap/3008245022”
。要解码LinkedHashMap,我们首先需要知道它是如何排序的——下一个
0
值告诉我们它使用默认的“插入顺序”,然后下一个
2
表示映射中有两个条目

现在我们迭代,直到看到两对键和值。下一个值将告诉我们正在查看的键的类型:
2
意味着进入字符串表,我们看到
“java.lang.string/2004016611”
,因此我们知道它将是一个字符串,然后
3
也从字符串表向我们显示
“AA”
。下一个是
4
,该键的值的类型,可以预见这是字符串表中的
“java.util.Date/3385151746”
。为了反序列化一个日期,我们从有效负载中读取一个
long
——GWT base64对这些数据进行编码以使其更小——这是
'WM577vZ'
,下一个标记

接下来的4个标记(
2
5
4
'WM577vZ'
)重复此过程,将第二个字符串键添加到地图中,并为其添加日期值

--


这个特定的有效负载并不能真正显示RPC的能力,但是它非常容易手工读取。在GWT应用程序之外解码它们目前并不容易(尽管我正在开发一个通用工具,它应该可以在任何地方解码,但SO答案并不是讨论它的好地方)——如果你想要一种可以由普通JS或其他非GWT技术处理的格式,RPC此时可能不是您的最佳选择。

LinkedHashMap在该响应中-该响应是一个对象流(即,如果相同的值出现两次,它将只被序列化一次,这使得内容更小,并且还允许循环引用,而不仅仅是平面树)

读取RPC有效负载是“向后”完成的-从末尾开始向后读取,我们从7(版本)、0(设置的标志)开始,一大串字符串(“字符串表”,解码应答所需的字符串,因此每个字符串只列出一次)

然后是
1
-流中的第一个对象是字符串表中第一个条目的类型,即
“java.util.LinkedHashMap/3008245022”
。要解码LinkedHashMap,我们首先需要知道它是如何排序的——下一个
0
值告诉我们它使用默认的“插入顺序”,然后下一个
2
表示映射中有两个条目

现在我们迭代,直到看到两对键和值。下一个值将告诉我们正在查看的键的类型:
2
意味着进入字符串表,我们看到
“java.lang.string/2004016611”
,因此我们知道它将是一个字符串,然后
3
也从字符串表向我们显示
“AA”
。下一个是
4
,该键的值的类型,可以预见这是字符串表中的
“java.util.Date/3385151746”
。为了反序列化一个日期,我们从有效负载中读取一个
long
——GWT base64对这些数据进行编码以使其更小——这是
'WM577vZ'
,下一个标记

接下来的4个标记(
2
5
4
'WM577vZ'
)重复此过程,将第二个字符串键添加到地图中,并为其添加日期值

--


这个特定的有效负载并不能真正显示RPC的能力,但是它非常容易手工读取。在GWT应用程序之外解码它们目前并不容易(尽管我正在开发一个通用工具,它应该可以在任何地方解码,但SO答案并不是讨论它的好地方)——如果你想要一种可以由普通JS或其他非GWT技术处理的格式,RPC可能不是你目前的最佳选择。

Hi,关于如何解释“响应”中的各种数据,如数组、哈希集、数字、日期和自定义字段,您是否有任何GWT文档链接可供参考。@如上所述,每个类都按顺序序列化其字段,并且递归地进行序列化,因此它将根据您的结构而变化-复杂对象的哈希集将