如何将地图转换为网址查询字符串?

2022-08-31 11:19:04

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

例:

我有一张地图:

"param1"=12,
"param2"="cat"

我想得到:

param1=12&param2=cat

最终输出

relativeUrl+param1=12&param2=cat

答案 1

我看到的现成最强大的是Apache Http Compoments(HttpClient 4.0)的URLEncodedUtils类。

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

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

  a=1&a=2&b=3

并不是说我建议使用这种参数名称。


答案 2

这是我快速写的东西;我相信它可以改进。

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"
    }
}

推荐