首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将map转换为url查询字符串?

如何将map转换为url查询字符串?
EN

Stack Overflow用户
提问于 2010-05-11 18:32:13
回答 17查看 151.9K关注 0票数 87

您知道有什么实用程序类/库可以将Map转换为URL友好的查询字符串吗?

示例:

我有张地图:

代码语言:javascript
复制
"param1"=12,
"param2"="cat"

我想要得到:

代码语言:javascript
复制
param1=12&param2=cat

最终输出

代码语言:javascript
复制
relativeUrl+param1=12&param2=cat
EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2010-05-11 20:00:28

我看到的最健壮的是来自Apache Http Compoments (HttpClient 4.0)的URLEncodedUtils类。

URLEncodedUtils.format()方法就是您所需要的。

它不使用map,因此您可以使用重复的参数名,例如,

代码语言:javascript
复制
  a=1&a=2&b=3

我并不推荐使用这种类型的参数名。

票数 71
EN

Stack Overflow用户

发布于 2010-05-11 19:09:09

以下是我快速编写的内容;我相信它还可以改进。

代码语言:javascript
复制
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"
    }
}
票数 45
EN

Stack Overflow用户

发布于 2015-03-23 22:40:32

我找到了一个使用java8和polygenelubricants解决方案的平滑解决方案。

代码语言:javascript
复制
parameters.entrySet().stream()
    .map(p -> urlEncodeUTF8(p.getKey()) + "=" + urlEncodeUTF8(p.getValue()))
    .reduce((p1, p2) -> p1 + "&" + p2)
    .orElse("");
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2809877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档