java把map转成url参数拼接

在工作中我们经常会把一个java map转成url参数字符串,这里展示两种做法。如果您想要的结果是需要自然排序的,可借助TreeMap实现。

方法1,不借助第三方工具包:

/**
 * 只要确保你的编码输入是正确的,就可以忽略掉 UnsupportedEncodingException
 */
public static String asUrlParams(Map<String, String> source){
    Iterator<String> it = source.keySet().iterator();
    StringBuilder paramStr = new StringBuilder();
    while (it.hasNext()){
        String key = it.next();
        String value = source.get(key);
        if (StringUtils.isBlank(value)){
            continue;
        }
        try {
        	// URL 编码
            value = URLEncoder.encode(value, "utf-8");
        } catch (UnsupportedEncodingException e) {
            // do nothing
        }
        paramStr.append("&").append(key).append("=").append(value);
    }
    // 去掉第一个&
    return paramStr.substring(1);
}

方法2,借助guava包的工具类:

mavne 引入 guava:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>28.1-jre</version>
</dependency>
public static String asUrlParams(Map<String, String> source){
	// TODO 如果要编码的话自己加下编码逻辑
    return Joiner.on("&")
            // 用指定符号代替空值,key 或者value 为null都会被替换
            .useForNull("")
            .withKeyValueSeparator("=")
            .join(source);
}

Joiner 对应的还有一个 Splitter,可以把 url 切割成 map,感兴趣的可以了解一下。
如果帮到你了,请点击右上角给个赞吧!!

我的个人博客地址:点击这里

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果要发送的参数Map集合,可以使用Java中的`Map.Entry`来遍历Map集合,并将参数拼接URL编码的字符串。以下是一个示例代码: ```java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Map; public class HttpPostExample { private final String USER_AGENT = "Mozilla/5.0"; public static void main(String[] args) throws Exception { HttpPostExample http = new HttpPostExample(); // URL参数 String url = "http://example.com/api"; Map<String, String> params = Map.of("param1", "value1", "param2", "value2"); // 发送POST请求 String response = http.sendPost(url, params); System.out.println(response); } // 发送POST请求 private String sendPost(String url, Map<String, String> params) throws Exception { URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // 添加请求头 con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); // 将参数拼接URL编码的字符串 StringBuilder urlParameters = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { if (urlParameters.length() > 0) { urlParameters.append("&"); } urlParameters.append(URLEncoder.encode(entry.getKey(), "UTF-8")); urlParameters.append("="); urlParameters.append(URLEncoder.encode(entry.getValue(), "UTF-8")); } // 发送POST请求 con.setDoOutput(true); DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(urlParameters.toString()); wr.flush(); wr.close(); // 获取响应 BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); return response.toString(); } } ``` 其中,`sendPost`方法接收URLMap参数,使用`Map.Entry`遍历Map集合,将参数拼接URL编码的字符串,并发送POST请求。其他部分与前面的示例代码相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值