您的位置:首页 > 移动开发 > 微信开发

【支付宝,微信支付必备】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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: