【问题标题】:encoding a list of key/value pairs into a URL request parameter将键/值对列表编码为 URL 请求参数
【发布时间】:2012-10-14 23:10:19
【问题描述】:

是否有标准 API 调用(或一组调用)允许我将键/值对列表编码为单个请求参数?不知何故,我以前从未这样做过。

我正在寻找的是生成一个 URL,该 URL 对将由指定页面解码的任意长的参数字符串进行编码。例如:

http://someth.ing/page?params=xxxxxxxxxxxxx

其中 xxxxxxx 是 a 的编码形式

Map<String, String>

或者如果那不可用,那么一个

List<String>

我知道我的替代方法是将每个键编码为其自己的请求参数,但这会在解码端产生大量解析工作,我宁愿避免。有什么建议吗?

【问题讨论】:

  • 没有标准。为了使事情自动化,我会设计一个前缀并将其作为参数添加到键的名称中(类似于 '?mymap_key1=value1&mymap_key2=value2...`。检索所有参数,检查前缀并重建地图可以完成通过一个可以重复使用的辅助例程。

标签: jsf servlets servlet-3.0


【解决方案1】:

您可以转换为/从JSON 转换。您可以为此使用Google Gson

Map<String, String> data = createItSomehow();
String dataAsJson = new Gson().toJson(data);
String url = "http://example.com/some?data=" + URLEncoder.encode(data, "UTF-8");
// ...

另一方面,假设一个 servlet:

String dataAsJson = request.getParameter("data");
Map<String, String> data = new Gson().fromJson(json, new TypeToken<Map<String, String>>(){}.getType());
// ...

【讨论】:

  • 这是一个我没有考虑过的有趣想法。使用 JSON 的一大优势是它可以让客户端(如果我愿意的话)的处理变得更加容易。我会在接下来的几天里玩它并报告。
猜你喜欢
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2016-02-23
  • 2021-01-23
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多