• 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签名验证,或者一些加密算法的验证中都需要对数据进行排序。

  • 相关阅读:
    JSP技术
    Eclipse中新建Maven Web项目报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Zuul【文件上传】
    Zuul【限流】
    Zuul【自定义Filter】
    Zuul【工作原理】
    Zuul【基础配置】
    Zuul【入门】
    Hystrix【参数配置及缓存】
    Hystrix【异常机制处理】
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/10672218.html
Copyright © 2020-2023  润新知