【支付宝,微信支付必备】Java实现url参数按照参数名Unicode码从小到大排序(字典序)
2016-12-14 11:55
375 查看
/** * * 方法用途: 对所有传入参数按照字段名的Unicode码从小到大排序(字典序),并且生成url参数串<br> * 实现步骤: <br> * * @param paraMap 要排序的Map对象 * @param urlEncode 是否需要URLENCODE * @param keyToLower 是否需要将Key转换为全小写 * true:key转化成小写,false:不转化 * @return */ public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower) { String buff = ""; Map<String, String> tmpMap = paraMap; try { List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet()); // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() { @Override public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { return (o1.getKey()).toString().compareTo(o2.getKey()); } }); // 构造URL 键值对的格式 StringBuilder buf = new StringBuilder(); for (Map.Entry<String, String> item : infoIds) { if (StringUtils.isNotBlank(item.getKey())) { String key = item.getKey(); String val = item.getValue(); if (urlEncode) { val = URLEncoder.encode(val, "utf-8"); } if (keyToLower) { buf.append(key.toLowerCase() + "=" + val); } else { buf.append(key + "=" + val); } buf.append("&"); } } buff = buf.toString(); if (buff.isEmpty() == false) { buff = buff.substring(0, buff.length() - 1); } } catch (Exception e) { return null; } return buff; }
DEMO演示
package com.zhiweism.easemob.api; import java.util.HashMap; import java.util.Map; import com.zhiweism.util.Util; public class test { public static void main(String[] args) { // TODO Auto-generated method stub //字典序列排序 Map<String,String> paraMap = new HashMap<String,String>(); paraMap.put("total_fee","200"); paraMap.put("appid", "wxd678efh567hg6787"); paraMap.put("body", "腾讯充值中心-QQ会员充值"); paraMap.put("out_trade_no","20150806125346"); String url = Util.formatUrlMap(paraMap, true, true); System.out.println(url); } }控制台输出
appid=wxd678efh567hg6787&body=%E8%85%BE%E8%AE%AF%E5%85%85%E5%80%BC%E4%B8%AD%E5%BF%83-QQ%E4%BC%9A%E5%91%98%E5%85%85%E5%80%BC&out_trade_no=20150806125346&total_fee=200
相关文章推荐
- Map集合按照ASCII码从小到大(字典序)排序--JAVA
- C# 参数按照ASCII码从小到大排序(字典序)
- C# 参数按照ASCII码从小到大排序(字典序)
- C# 参数按照ASCII码从小到大排序(字典序)
- java实现URL带参数请求(get/post)
- java中实现HashMap中的按照key的字典顺序排序输出
- java实现:http协议get和post方法的url参数请求响应及交互
- Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法
- java中给map按照值value排序输出,用Comparator实现
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
- java中实现HashMap中的按照key的字典顺序排序输出
- java实现post get 传参数url
- java实现URL带参数请求(get/post)
- java 中List按照date排序的实现
- java实现URL带参数请求(get/post)
- java8实现spark wordcount并且按照value排序输出
- 前端笔试题练习笔记:函数参数按照从小到大的顺序排序、数字格式化
- 按照字典排序,生成1-n队列(java实现)
- Java Map 按照Value排序的实现方法
- java编写的hadoop wordcount,单MR任务实现按照词频排序输出结果