【发布时间】:2017-05-08 16:16:56
【问题描述】:
我有多个可序列化的 java 对象,我需要使用 get 参数发送这些对象;
www.example.com?objects=rO0ABXNyACl0ci5iaXp......
如何发送这些对象?
目前我正在尝试使用逗号(“%2C”)来分隔对象,但我不知道 Java 在尝试序列化对象时是否可以使用“%2C”。
String serializedObject1 = "sf21adada....";
String serializedObject2 = "nfg312111....";
String serializedObject3 = "mjhgfffff....";
String URL = "www.example.com?objects=" + serializedObject1 + "%2C" + serializedObject2 + "%2C" + serializedObject3;
编辑:我有一些应用程序通过 http 请求发送一个对象,我需要更新这个应用程序以支持发送多个对象。这是主要代码;
String serializedObject = URLEncoder.encode(Base64.encodeObject(myObject), "UTF-8");
URL = "www.example.com?objects=" + serializedObject;
makeRequest(URL);
【问题讨论】:
-
序列化不会产生字符串。它产生字节。您首先需要将这些字节转换为可打印字符,然后对它们进行 urlencode。但是传递序列化的 Java 对象,甚至更多地作为查询字符串参数,在我看来是个糟糕的主意。顺便说一句,查询字符串的长度是有限的。你想达到什么目的?你为什么要这样做?
-
例如你想序列化成 JSON。然后你会考虑以这种格式表达你的数据。
-
我同意@JBNizet。这似乎是一个非常糟糕的主意。 至少将它们作为请求正文中的 POST 参数发送。但是您应该真正将您的 HTTP 请求与您使用的主机语言分离。
-
也就是说,发送多个同名参数,语法为
?objects=blabla&objects=foo&objects=bar。您已经正确地将字节转换为字符串并对结果进行了 urlencoding,因此只需按照我刚刚解释的方式加入它们就可以正常工作(除非它们太大)。但实际上,您不应该通过 HTTP 发送序列化的 Java 对象,当然也不应该作为查询字符串参数。 -
无论您走到哪里,都面临着 URL 长度限制的严重危险。
标签: java serialization