1. 程式人生 > >Map與JavaBean實體類之間的相互轉化

Map與JavaBean實體類之間的相互轉化

package com.newcapec.util.map;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import 
org.apache.commons.beanutils.PropertyUtilsBean; import com.newcapec.cloudpay.dao.po.HostUserInfo; import com.newcapec.cloudpay.dao.po.WXUserInfo; /** * @Title: Java MapJavaBean實體類之間的相互轉化 * @ClassName:MapBeanTransUtils.java * @Description: * * @Copyright 2016-2017 - Powered By 研發中心 * @author: FLY
* @date:20161223上午10:11:49 * @version V1.0 */ public class MapBeanTransUtils { /** * 將一個 JavaBean 物件轉化為一個 Map * * @param bean * 要轉化的JavaBean 物件 * @return 轉化出來的 Map 物件 * @throws IntrospectionException * 如果分析類屬性失敗 * @throws IllegalAccessException *
如果例項化 JavaBean 失敗 * @throws InvocationTargetException * 如果呼叫屬性的 setter 方法失敗 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map bean2Map(Object bean) throws IntrospectionException, IllegalAccessException, InvocationTargetException { Class type = bean.getClass(); Map returnMap = new HashMap(); BeanInfo beanInfo = Introspector.getBeanInfo(type); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (!propertyName.equals("class")) { Method readMethod = descriptor.getReadMethod(); Object result = readMethod.invoke(bean, new Object[0]); if (result != null) { returnMap.put(propertyName, result); } else { returnMap.put(propertyName, ""); } } } return returnMap; } /** * 將一個 Map 物件轉化為一個 JavaBean * * @param type * 要轉化的型別 * @param map * 包含屬性值的 map * @return 轉化出來的 JavaBean 物件 * @throws IntrospectionException * 如果分析類屬性失敗 * @throws IllegalAccessException * 如果例項化 JavaBean 失敗 * @throws InstantiationException * 如果例項化 JavaBean 失敗 * @throws InvocationTargetException * 如果呼叫屬性的 setter 方法失敗 */ @SuppressWarnings("rawtypes") public static Object map2Bean(Class type, Map map) throws IntrospectionException, IllegalAccessException, InstantiationException, InvocationTargetException { BeanInfo beanInfo = Introspector.getBeanInfo(type); // 獲取類屬性 Object obj = type.newInstance(); // 建立 JavaBean 物件 // JavaBean 物件的屬性賦值 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (map.containsKey(propertyName)) { // 下面一句可以 try 起來,這樣當一個屬性賦值失敗的時候就不會影響其他屬性賦值。 Object value = map.get(propertyName); Object[] args = new Object[1]; args[0] = value; descriptor.getWriteMethod().invoke(obj, args); } } return obj; } // JAVABEAN實體類轉為map型別,然後返回一個map型別的值 public static Map<String, Object> beanToMap(Object obj) { Map<String, Object> params = new HashMap<String, Object>(0); try { PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(obj); for (int i = 0; i < descriptors.length; i++) { String name = descriptors[i].getName(); if (!"class".equals(name)) { params.put(name, propertyUtilsBean.getNestedProperty(obj, name)); } } } catch (Exception e) { e.printStackTrace(); } return params; } public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException, IntrospectionException { // 獲取分隔符 // System.out.println(System.getProperty("path.separator")); // java物件拷貝之BeanUtils.copyProperties() 用法 WXUserInfo wxUserInfo = new WXUserInfo(); HostUserInfo hostUserInfo = new HostUserInfo(); wxUserInfo.setCustomerCode("11"); wxUserInfo.setCustomerId("id"); wxUserInfo.setCustomerName("name"); wxUserInfo.setName("aa"); wxUserInfo.setStuNo("001"); wxUserInfo.setUserId("uset"); // BeanUtils.copyProperties(wxUserInfo, hostUserInfo); // System.out.println(hostUserInfo); // Map<String, String> hashMap = new HashMap<String, String>(); Map convertBean = MapBeanTransUtils.bean2Map(wxUserInfo); Map<String, Object> beanToMap = MapBeanTransUtils.beanToMap(wxUserInfo); // MapBeanTransUtils.beanToMap(obj) System.out.println(beanToMap); // map 遍歷 for (Map.Entry<String, Object> entry : beanToMap.entrySet()) { System.out.println("屬性名稱:"+entry.getKey()+"------"+"值:"+entry.getValue()); } } }

相關推薦

MapJavaBean實體之間相互轉化

package com.newcapec.util.map; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; imp

datatable實體之間相互轉化的幾種方法

#region DataTable轉換成實體類 /// <summary> /// 填充物件列表:用DataSet的第一個表填充實體類 /// </summary> /// <

Java 中 MapJavaBean之間相互轉化

在做匯入的時候,遇到了需要將map物件轉化 成javabean的問題,也就是說,不清楚javabean的內部欄位排列,只知道map的 key代表javabean的欄位名,value代表值。 那現在就需要用轉化工具了。是通用的哦! 首先來看 JavaBean 轉化成Ma

MapJavaBean之間相互轉化

在做匯入的時候,遇到了需要將map物件轉化 成javabean的問題,也就是說,不清楚javabean的內部欄位排列,只知道map的 key代表javabean的欄位名,value代表值。 那現在就需要用轉化工具了。是通用的哦! 首先來看 JavaBean 轉化成Ma

Android JSON資料實體之間相互轉化-------GSON的用法

這篇文章就是示範如何用GSON把JSON資料與實體類進行相互轉化,需要用到gson-2.3.1.jar這個包。直接貼程式碼了: import java.lang.reflect.Type; import java.util.ArrayList; imp

Java BeanMap之間相互轉化的實現

涵蓋 ffffff ger 動態性 ring eth 名稱 分享圖片 tro 目錄樹概述Apache BeanUtils將Bean轉MapApache BeanUtils將Map轉Bean理解BeanUtils將Bean轉Map的實現之手寫Bean轉Map 概述  Apac

使用Mapstruct來進行domain實體Entity模型之間的對映操作,減少之間程式碼轉化

轉載地址:http://blog.csdn.net/lu_ckid/article/details/54602057 在一個成熟可維護的工程中,細分模組後,domian工程最好不要被其他工程依賴,但是實體類一般存於domain之中,這樣其他工程想獲取實體類資

json:實體和JSON物件之間相互轉化

在需要用到JSON物件封裝資料的時候,往往會寫很多程式碼,也有很多複製貼上,為了用POJO的思想我們可以裝JSON轉化為實體物件進行操作 1. [程式碼]工具類     packagemyUtil; importjava.io.IOException; impor

String型別 Integer 型別之間相互轉化

   String 轉成 Integer                 》》當我們要把String轉化為Integer時,一定要對String進行非空判斷,否則很可能報空指標異常。

android中px,sp,dp之間相互轉化的工具

在平時開發中,難免遇到需要在程式碼裡對尺寸進行轉化的問題,在這裡總結一下,方便以後呼叫 public class DensityUtil { /** * dp轉換成px */ private int dp2px(Context context,float dp

映射篇:request-String-Object-Map之間相互轉化(程序員的成長之路---第5篇)

exception types common validate runt eight methods 數據庫 英文 為什麽寫這一篇 問題一:jdbc連接數據庫返回的對象是ResultSet,如何把ResultSet對象中的值轉換為我們自建的各種實體類? 我估計,80%的程序

java JavaBean(實體)轉化為map (利用Java反射實現)

/** * 獲取利用反射獲取類裡面的值和名稱轉化為map * * @param obj //JavaBean * @return map * @throws IllegalAccessException

javabean實體物件轉為Map型別物件的方法

javabean(實體類)轉Map型別/*下面是從poi匯出EXCEL的一部分程式碼,主要將傳引數的list轉換為map型別,list裝載的資料是從資料庫取出來的,可以是陣列型別,也可以是map型別,也可以是實體類*/ public static TableData cr

FastJson中JsonArray、JsonObject、json格式字串、javabean之間相互轉化

package com.kenny; import java.awt.print.Book; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; imp

MapJavaBean之間的轉換

/** * 將一個 JavaBean 物件轉化為一個 Map * * @param bean 要轉化的JavaBean 物件 * @return 轉化出來的 Map 物件 * @throws IntrospectionException 如果分析類屬性失

linux中常用時間和字符串之間相互轉化

時間函數 spa lin cell form time函數 地理 -1 名稱 在Linux中經常會遇到時間和字符串相互轉化的情形,有兩個函數專門對應相應的轉化。 1、時間轉字符串函數strftime 函數原型:size_t strftime(char *s,size_t m

NSString - - 常用結構體字符串之間轉化(打印時可用)

code cgrect net 字符 cgpoint mst cnblogs cgp affine CGRect、CGSize、UIEdgeInsets、UIOffset、CGPoint、NSRange等 UIGeometry.h 1 NSString *NSStr

Javascript學習筆記-數據相互轉化

數據類型轉化註意事項 : string() number() 必需要大寫Javascript學習筆記-數據類型相互轉化

C#中父和子之間相互轉換

mage all spa 分享 mic ack 子類 utl round 所用到的類文件:Person.cs:Student.cs:Teacher.cs:問題1:總結:1 父類不能直接強制轉換成子類2 只有父類對象指向子類,那麽父類是可以強制轉換成子類,如果父類對象沒有指向

Eigen四元數尤拉角的相互轉化函式

1、原始碼 #include <iostream> #include <Eigen/Eigen> #include <stdlib.h> #include <Eigen/Geometry> #inclu