您知道有什么实用程序类/库可以将Map转换为URL友好的查询字符串吗?
示例:
我有张地图:
"param1"=12,
"param2"="cat"
我想要得到:
param1=12¶m2=cat
最终输出
relativeUrl+param1=12¶m2=cat
发布于 2010-05-11 20:00:28
我看到的最健壮的是来自Apache Http Compoments (HttpClient 4.0)的URLEncodedUtils类。
URLEncodedUtils.format()
方法就是您所需要的。
它不使用map,因此您可以使用重复的参数名,例如,
a=1&a=2&b=3
我并不推荐使用这种类型的参数名。
发布于 2010-05-11 19:09:09
以下是我快速编写的内容;我相信它还可以改进。
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"
}
}
发布于 2015-03-23 22:40:32
我找到了一个使用java8和polygenelubricants解决方案的平滑解决方案。
parameters.entrySet().stream()
.map(p -> urlEncodeUTF8(p.getKey()) + "=" + urlEncodeUTF8(p.getValue()))
.reduce((p1, p2) -> p1 + "&" + p2)
.orElse("");
https://stackoverflow.com/questions/2809877
复制相似问题