java对对象或者map的属性进行排序
package com.xkj.spider.mpb.util; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import lombok.extern.slf4j.Slf4j; /** * 对属性进行排序得一个排序后的属性字符串 * @author yangzl * @data 2019年4月4日 * */ @Slf4j public class SortPropertiesUtils { public static final String PARAM_EQUAL = "="; public static final String PARAM_AND = "&"; private SortPropertiesUtils() {} /** * 对Object进行List<NameValuePair>转换后按key进行升序排序,以key=value&...形式返回 * * @param list * @return */ public static String sort(Object order) { Map<String, Object> map = bean2Parameters(order); return sort(map); } /** * 对对Object转换后, 以key=value&...形式返回按key进行升序排序,以key=value&...形式返回 * * @param order * @return */ public static String sort(Map<String, Object> order) { if (null == order || order.isEmpty()) { return null; } Map<String, Object> parameters = new TreeMap<>((obj1, obj2) -> obj1.compareToIgnoreCase(obj2)); parameters.putAll(order); StringBuilder sb = new StringBuilder(); for (Map.Entry<String, Object> entry : parameters.entrySet()) { if (null != entry.getValue()) { sb.append(entry.getKey()); sb.append(PARAM_EQUAL); sb.append(entry.getValue().toString()); sb.append(PARAM_AND); } } String params = sb.toString(); if (sb.toString().endsWith(PARAM_AND)) { params = sb.substring(0, sb.length() - 1); } return params; } /** * 将bean转换成键值对列表 * * @param bean * @return */ private static Map<String, Object> bean2Parameters(Object bean) { if (bean == null) { return null; } Map<String, Object> parameters = new HashMap<>(); if (null != parameters) { // 取得bean所有public 方法 Method[] Methods = bean.getClass().getMethods(); for (Method method : Methods) { if (method != null && method.getName().startsWith("get") && !method.getName().startsWith("getClass")) { // 得到属性的类名 Object value = null; // 得到属性值 try { value = method.invoke(bean); if (null != value) { // 添加参数 // 将方法名称转化为id,去除get,将方法首字母改为小写 String param = method.getName().replaceFirst("get", ""); if (param.length() > 0) { String first = String.valueOf(param.charAt(0)).toLowerCase(); param = first + param.substring(1); } parameters.put(param, value); } } catch (Exception e) { log.error("", e.getMessage(), e); } } } } return parameters; } }
在大部分有md5签名验证,或者一些加密算法的验证中都需要对数据进行排序。