利用TreeMap的排序特性来将按照参数的首字母按照ASCII从小到大的顺序进行排列
String userId="111";
String productId="222";
String remark="91名师指路";
String timestamp=String.valueOf(System.currentTimeMillis()); // 当前系统时间
String serialNo=String.valueOf(IdUtil.getSnowflake(1,1).nextId()); // 保证唯一即可
SortedMap<String, String> parmas=new TreeMap<>();
parmas.put("userId", userId);
parmas.put("productId", productId);
parmas.put("remark", remark);
parmas.put("timestamp", timestamp);
parmas.put("serialNo", serialNo);
log.info(parmas);
执行结果
{productId=222, remark=91名师指路, serialNo=1448095277423661056, timestamp=1634087793091, userId=111}
二:我们将参数进行ASCII排序后,假设我们还需要采用&进行拼接。
代码如下:
// 2 循环map使用&进行拼接
Set<Map.Entry<String, String>> entries = parmas.entrySet();
Iterator<Map.Entry<String, String>> iterator = entries.iterator();
List<String> values =new ArrayList();
while(iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
String k = String.valueOf(entry.getKey());
String v = String.valueOf(entry.getValue());
if(StringUtils.isNotBlank(k) && StringUtils.isNotBlank(v)){
values.add(k + "=" + v);
}
}
values.add("clientId=" + clientId);
String str=StringUtils.join(values, "&");
log.info("拼接参数: {}", str);
执行结果:
拼接参数: productId=222&remark=91名师指路&serialNo=1448095277423661056×tamp=1634087793091&userId=111&clientId=1446721298934927360