今天调用接口的时候,人家的接口规定得按照ASCII 的排序方式,对参数进行排序,然后把排好序的参数
按照key=value键值对的方式进行加密验证,接下来就给大家分享下这个排序工具类ASCIISortUtil.java
1public class ASCIISortUtil { 2 3 /** 4 * 5 * 将参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值 6 * 对的格式(即key1=value1&key2=value2…)拼接成字符串 7 * 8 * @param paraMap 9 * 转换参数 10 * @param isURLEncode 11 * 是否对所有Value进行URLEncod转码 12 * @return 13 * 14 */ 15 public static String formatQueryParaMap(Map<String, String> paraMap, boolean isURLEncode) { 16 String returnValue = null; 17 try { 18 List<Entry<String, String>> infoIds = new ArrayList<Entry<String, String>>(paraMap.entrySet()); 19 Collections.sort(infoIds, new Comparator<Entry<String, String>>() { 20 public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { 21 return (o1.getKey()).toString().compareTo(o2.getKey()); 22 } 23 }); 24 StringBuffer buff = new StringBuffer(); 25 for (int i = 0; i < infoIds.size(); i++) { 26 Map.Entry<String, String> item = infoIds.get(i); 27 if (null != item.getKey() && !"".equals(item.getKey())) { 28 String key = item.getKey(); 29 String val = item.getValue(); 30 if (isURLEncode) { 31 val = URLEncoder.encode(val, "UTF-8"); 32 /* 空格通过URLEncoder转码后是“+”,所有要替换成“%20” */ 33 val = val.replace("+", "%20"); 34 } 35 buff.append(key + "=" + val + "&"); 36 } 37 } 38 returnValue = buff.toString(); 39 if (null != returnValue && !"".equals(returnValue)) { 40 returnValue = returnValue.substring(0, returnValue.length() - 1); 41 } 42 } catch (Exception e) { 43 throw new RuntimeException(e.getMessage()); 44 } 45 return returnValue; 46 } 47}