博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象和map互相转换工具类
阅读量:4984 次
发布时间:2019-06-12

本文共 6990 字,大约阅读时间需要 23 分钟。

package com.panchan.m2.utils;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;/** * Created by Administrator on 2017/3/6. */public class ObjectMapUtils {    /***     * 将对象转换为map对象     * @param thisObj 对象     * @return     */    public static Map
objectToMap(Object thisObj) { Map
map = new HashMap
(); @SuppressWarnings("rawtypes") Class c; try { c = Class.forName(thisObj.getClass().getName()); //获取所有的方法 Method[] m = c.getMethods(); for (int i = 0; i < m.length; i++) { //获取方法名 String method = m[i].getName(); //获取get开始的方法名 if (method.startsWith("get")&&!method.contains("getClass")) { try{ //获取对应对应get方法的value值 Object value = m[i].invoke(thisObj); if (value != null) { //截取get方法除get意外的字符 如getUserName-->UserName String key=method.substring(3); //将属性的第一个值转为小写 key=key.substring(0,1).toLowerCase()+key.substring(1); //将属性key,value放入对象 if(value.getClass().isArray()){ String values = ""; for(Object o:(Object[])value){ values += o.toString() +"|"; } map.put(key, values); } else { map.put(key, value); } } }catch (Exception e) { e.printStackTrace(); // TODO: handle exception System.out.println("error:"+method); } } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return map; } /** * 将Map对象通过反射机制转换成Bean对象 * * @param map 存放数据的map对象 * @param clazz 待转换的class * @return 转换后的Bean对象 * @throws Exception 异常 */ public static Object mapToObject(Map
map, Class
clazz) throws Exception { Object obj = clazz.newInstance(); if(map != null && map.size() > 0) { for(Map.Entry
entry : map.entrySet()) { String propertyName = entry.getKey(); //属性名 Object value = entry.getValue(); String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); //获取属性对应的对象字段 Field field = getClassField(clazz, propertyName); if(field==null) continue; //获取字段类型 Class
fieldTypeClass = field.getType(); //根据字段类型进行值的转换 value = convertValType(value, fieldTypeClass); try{ //调用对象对应的set方法 clazz.getMethod(setMethodName, field.getType()).invoke(obj, value); }catch(NoSuchMethodException e){ e.printStackTrace(); } } } return obj; } /** * 获取指定字段名称查找在class中的对应的Field对象(包括查找父类) * * @param clazz 指定的class * @param fieldName 字段名称 * @return Field对象 */ private static Field getClassField(Class
clazz, String fieldName) { if( Object.class.getName().equals(clazz.getName())) { return null; } Field []declaredFields = clazz.getDeclaredFields(); for (Field field : declaredFields) { if (field.getName().equals(fieldName)) { return field; } } Class
superClass = clazz.getSuperclass(); if(superClass != null) {
// 简单的递归一下 return getClassField(superClass, fieldName); } return null; } /** * 将Object类型的值,转换成bean对象属性里对应的类型值 * * @param value Object对象值 * @param fieldTypeClass 属性的类型 * @return 转换后的值 */ private static Object convertValType(Object value, Class
fieldTypeClass) { Object retVal = null; if(Long.class.getName().equals(fieldTypeClass.getName()) || long.class.getName().equals(fieldTypeClass.getName())) { retVal = Long.parseLong(value.toString()); } else if(Integer.class.getName().equals(fieldTypeClass.getName()) || int.class.getName().equals(fieldTypeClass.getName())) { retVal = Integer.parseInt(value.toString()); } else if(Float.class.getName().equals(fieldTypeClass.getName()) || float.class.getName().equals(fieldTypeClass.getName())) { retVal = Float.parseFloat(value.toString()); } else if(Double.class.getName().equals(fieldTypeClass.getName()) || double.class.getName().equals(fieldTypeClass.getName())) { retVal = Double.parseDouble(value.toString()); } else { retVal = value; } return retVal; }// public static void main(String... args) throws Exception{// BankVo bv = new BankVo();// bv.setBankCard("11111111111111");// bv.setBankImgUrl("222222222222");// String[] aa = new String[]{"1","2"};// bv.setAa(aa);// //对象转map // Map
map = objectToMap(bv); // System.out.println(getPlanText(map)); // for (Map.Entry entry : map.entrySet()) {// System.out.println(entry); // System.out.println(entry.getKey() +":" + entry.getValue());// } //map转对象// BankVo newUser = (BankVo) mapToObject(map,BankVo.class);// System.out.println(newUser.getBankCard());// System.out.println(newUser.getBankImgUrl());// System.out.println(newUser.getAa());// // } /** * sign 参数排序去空 * @return 生成sign 明文串 */ public static String getPlanText(Map
map) { // Map
map = new TreeMap
(); //这里将map.entrySet()转换成list List
> list = new ArrayList
>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator
>() { //升序排序 public int compare(Entry
o1, Entry
o2) { return o1.getKey().compareTo(o2.getKey()); } }); StringBuffer s = new StringBuffer(); for(Map.Entry
m:list){ s.append(m.getKey()).append("=").append(m.getValue()).append("&"); } if(s.length()>1) s.setLength(s.length()-1); String planText = s.toString(); System.out.println("request planText ["+planText+"]"); return planText; }}

 

转载于:https://www.cnblogs.com/huyanlon/p/10641165.html

你可能感兴趣的文章
JAVA学习第十四课(接口:implements及其基本应用)
查看>>
infopath使用中遇到的几个小问题
查看>>
一些有用的ubuntu命令总结---长期更新
查看>>
CAS原理分析
查看>>
使用unetbootin将Linux安装到U盘
查看>>
view组件
查看>>
吐个槽
查看>>
CSS 动画
查看>>
关于阿里云 ETC服务器 端口开放问题
查看>>
ios 遮罩层,切换后内容滑动到最上方,并且不可点击
查看>>
采用AngularJS 模仿抽奖实例简单实现【Study笔记】
查看>>
android 进程间通信---Service Manager(2)
查看>>
HTML5移动开发中的meta与link
查看>>
url添加时间戳
查看>>
JS/javaScript 获取div内容
查看>>
简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation...
查看>>
BestCoder24 1001.Sum Sum Sum(hdu 5150) 解题报告
查看>>
3、实例管理
查看>>
高斯消元模板,整数(数学)
查看>>
bzoj4690: Never Wait for Weights
查看>>