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);
}
}