正文前先来一波福利推荐:
福利一:
百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。
福利二:
毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。
获取方式:
微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复 百万年薪架构师 ,精品收藏PPT 获取云盘链接,谢谢大家支持!
------------------------正文开始---------------------------
一、如果传入进来的Object对象,最后生成制定格式的字符换 text;
list拼接成字符串,map中的所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,list的元素之间用“|”字符拼接
private static String getSignText(Object obj) { if (obj instanceof Collection) { return getListSignText((Collection<Object>) obj); } else if (obj instanceof Map) { return getMapSignText((Map) obj); } else if (obj instanceof Number) { return obj.toString(); } else if (obj != null) { return obj.toString(); } else { return ""; } }
对list对象继续进行递归处理:
private static String getListSignText(Collection list) { StringBuffer paramBuffer = new StringBuffer(); for (Object obj : list) { paramBuffer.append(getSignText(obj)).append("|"); } return paramBuffer.substring(0, paramBuffer.length() - 1); }
最终对map对象的处理:
private static String getMapSignText(Map map) { String[] keys = (String[]) map.keySet().toArray(new String[0]); // 1. 参数名按照ASCII码表升序排序 Arrays.sort(keys); // 2. 按照排序拼接参数名与参数值 StringBuffer paramBuffer = new StringBuffer(); for (String key : keys) { paramBuffer.append(key).append("=").append(getSignText(map.get(key)) == null ? "" : getSignText(map.get(key))).append("&"); } return paramBuffer.substring(0, paramBuffer.length() - 1); }
二、对制定格式的 text 进行 MD5 加密:
DigestUtils.md5Hex(text.getBytes(charsetName));