GWT RPC如何在其有效负载中编码java.lang.Long值?

时间:2014-03-05 17:10:21

标签: java gwt encoding rpc

我目前正在编写一个解析器来解释GWT RPC的响应。

但是,我很难弄清楚GWT用于编码java.lang.Long值的编码(即不是原始长度 - 这将是Base64)

以下是一个示例RPC负载,用于通过它的ID检索组对象(通过.retrieve(java.lang.Long id)):

7|0|5|http://10.0.1.35:8005/platform/gwt/com.application.gwt.Contacts/|57C71F0104C208A16262D2898A6133DD|com.application.gwt.client.rpc.GroupService|retrieve|java.lang.Long/4227064769|1|2|3|4|1|5|5|PFu|

我设法弄清楚值“PFu”(最后)是检索方法中使用的组编码ID。

实际组的ID是“61806”。

所以我的问题是,“61806”如何成为“PFu”?这里使用什么编码?它似乎不是Base 64。

其他情况包括:

iW = 2198 D4O = 15886

2 个答案:

答案 0 :(得分:3)

事实上,根据您的示例,它是完全有效的Base64。

然而,似乎最后两位数(值62,63)分别使用'$'和'_',而不是更常见的'+'和'/'。

下划线使URL安全并在某些实现中使用,但美元符号必须是他们自己的发明。

如果您通过转换器运行示例,如果值是ascii编码(可能是它们),则可能会得到错误的结果。

答案 1 :(得分:0)

您可以使用GWT com.google.gwt.user.server.Base64Utils类来获取编码/解码值。

e.g。

String val  = Base64Utils.toBase64(727854);
long l  = Base64Utils.longFromBase64("WIe7dms");