Bean Map String 的转化

BeanToMp

1.利用java beans包的BeanInfo 和 Introducter

 /**
     * Bean转TreeMap
     *
     * @param bean
     * @return
     */
    private static TreeMap<String, String> transBean2Map(Object bean) {
        if (bean == null) {
            return null;
        }
        TreeMap<String, String> map = new TreeMap<>();
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
            PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : descriptors) {
                String key = property.getName();
                if ("class".equals(key)) {
                    continue;
                }
                Method getter = property.getReadMethod();
                String value = (String) getter.invoke(bean);
                map.put(key, value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

 2.利用cglib的BeanMap类

  public static Map<String, Object> beanToMap(Object bean) {
        return null == bean ? null : BeanMap.create(bean);
    }

 

不过,返回的是普通map,结果要排序的话可以重新构造一个treeMap,putAll一下即可

3.Map 转String

基本上就是遍历map的entrySet,用StringBuilder链接key和value;

 public static String mapToString(TreeMap<String, Object> params) throws Exception {
       
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            if (!ObjectUtils.isEmpty(entry.getValue())) {
                if(entry.getValue() instanceof BigDecimal){
                    sb.append(entry.getKey()).append("=").append(new BigDecimal(entry.getValue()+"").setScale(2, BigDecimal.ROUND_HALF_DOWN)).append("&");
                }else {
                    sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
                }
            }
        }

        if (sb.length() > 0) {
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.toString();
    }

4.一般情况下,我们此类需求是用来加密的

    /**
     * 签名
     *
     * @param params
     * @return
     * @throws Exception
     */
    public static String sign(TreeMap<String, Object> params, String appkey) throws Exception {
        //签名明文组装不包含sign字段
        if (params.containsKey("sign")) {
            params.remove("sign");
        }
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            if (!ObjectUtils.isEmpty(entry.getValue())) {
                if(entry.getValue() instanceof BigDecimal){
                    sb.append(entry.getKey()).append("=").append(new BigDecimal(entry.getValue()+"").setScale(2, BigDecimal.ROUND_HALF_DOWN)).append("&");
                }else {
                    sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
                }
            }
        }
        sb.append("key=").append(appkey);
        
        String sign = md5(sb.toString().getBytes("UTF-8")).toUpperCase();
        logger.info("appkey {} sign {} params: {}", appkey, sign, sb.toString());
        params.remove("key");
        return sign;
    }



    /**
     * md5
     * @param b
     * @return
     */
    public static String md5(byte[] b) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.reset();
            md.update(b);
            byte[] hash = md.digest();
            StringBuffer outStrBuf = new StringBuffer(32);
            for (int i = 0; i < hash.length; i++) {
                int v = hash[i] & 0xFF;
                if (v < 16) {
                    outStrBuf.append('0');
                }
                outStrBuf.append(Integer.toString(v, 16).toLowerCase());
            }
            return outStrBuf.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return new String(b);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值