如何将地图转换为网址查询字符串?
2022-08-31 11:19:04
您知道任何可以将Map转换为URL友好查询字符串的实用程序类/库吗?
例:
我有一张地图:
"param1"=12,
"param2"="cat"
我想得到:
param1=12¶m2=cat
最终输出
relativeUrl+param1=12¶m2=cat
您知道任何可以将Map转换为URL友好查询字符串的实用程序类/库吗?
例:
我有一张地图:
"param1"=12,
"param2"="cat"
我想得到:
param1=12¶m2=cat
最终输出
relativeUrl+param1=12¶m2=cat
我看到的现成最强大的是Apache Http Compoments(HttpClient 4.0)的URLEncodedUtils类。
该方法是您需要的。URLEncodedUtils.format()
它不使用 map,因此您可以拥有重复的参数名称,例如,
a=1&a=2&b=3
并不是说我建议使用这种参数名称。
这是我快速写的东西;我相信它可以改进。
import java.util.*;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MapQuery {
static String urlEncodeUTF8(String s) {
try {
return URLEncoder.encode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new UnsupportedOperationException(e);
}
}
static String urlEncodeUTF8(Map<?,?> map) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<?,?> entry : map.entrySet()) {
if (sb.length() > 0) {
sb.append("&");
}
sb.append(String.format("%s=%s",
urlEncodeUTF8(entry.getKey().toString()),
urlEncodeUTF8(entry.getValue().toString())
));
}
return sb.toString();
}
public static void main(String[] args) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("p1", 12);
map.put("p2", "cat");
map.put("p3", "a & b");
System.out.println(urlEncodeUTF8(map));
// prints "p3=a+%26+b&p2=cat&p1=12"
}
}