一、如果传入进来的Object对象,最后生成制定格式的字符换 text;
代码语言:javascript复制list拼接成字符串,map中的所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,list的元素之间用“|”字符拼接
代码语言:javascript复制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对象继续进行递归处理:
代码语言:javascript复制 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对象的处理:
代码语言:javascript复制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);
}
代码语言:javascript复制二、对制定格式的 text 进行 MD5 加密:
代码语言:javascript复制DigestUtils.md5Hex(text.getBytes(charsetName));