在给定基本URL和带参数</string,string>的Map <string,string>的情况下编码URL的标准方法

时间:2010-12-13 12:21:41

标签: java url

我们正在寻找一种标准方法,在给定预定义基本URL和参数和值的Map的情况下对URL进行编码。 理想情况下,该方法声明为

String constructURL( String baseURL, Map<String,String> parameters)

将像以下代码段一样工作

Map<String, String> params = new HashMap<String,String>();
params.put("p1", "v1");
params.put("p2", "v2");
String url = constructURL( "page.html", params);

和url将具有以下值

"page.html?p1=v1&p2=v2"
不过,我们正在使用Apache Click with Tomcat。

2 个答案:

答案 0 :(得分:2)

JDK的URLEncoder应该适用于您的用例。像这样:

String constructURL(String base, Map<String, String> params) {
  StringBuilder url = new StringBuilder(base);
  if(params != null && params.size() > 0) {
  url.append("?");
  for(Map.Entry<String, String> entry : params.entrySet()) {
      url.append(entry.getKey());
      url.append("=");
      url.append(URLEncoder.encode(entry.getValue()));
      url.append("&");   //not for the last one (but should be OK)
    }
  }

return url.toString();
}

答案 1 :(得分:1)

您可以使用URLCodec中的Commons Codec来创建参数的网址编码版本,然后循环参数以创建查询。请查看the source of URLEncodedUtils class in Apache HttpClient以查看我解释的示例。