Java实现url参数按照参数名Unicode码从小到大排序(字典序)

转自:https://blog.csdn.net/dong_18383219470/article/details/53636943


/** 
    *  
    * 方法用途: 对所有传入参数按照字段名的Unicode码从小到大排序(字典序),并且生成url参数串
* 实现步骤:
* * @param paraMap 要排序的Map对象 * @param urlEncode 是否需要URLENCODE * @param keyToLower 是否需要将Key转换为全小写 * true:key转化成小写,false:不转化 * @return */ public static String formatUrlMap(Map paraMap, boolean urlEncode, boolean keyToLower) { String buff = ""; Map tmpMap = paraMap; try { List> infoIds = new ArrayList>(tmpMap.entrySet()); // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) Collections.sort(infoIds, new Comparator>() { @Override public int compare(Map.Entry o1, Map.Entry o2) { return (o1.getKey()).toString().compareTo(o2.getKey()); } }); // 构造URL 键值对的格式 StringBuilder buf = new StringBuilder(); for (Map.Entry 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; }

测试:

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 paraMap = new HashMap();  
        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);  
    }  
  
}  

你可能感兴趣的:(学习笔记)