import net.bytebuddy.implementation.bytecode.Throw;
import org.springframework.cglib.beans.BeanMap;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @author Lius
* @date 2018/10/26 13:37
* @describe 實(shí)體工具類钦椭,
*/
public class BeanUtils extends org.springframework.beans.BeanUtils {
public BeanUtils() {
}
/**
* 實(shí)例化對(duì)象:傳入類對(duì)類進(jìn)行實(shí)例化對(duì)象
*
* @param clazz 類
* @return 對(duì)象
* @author Lius
* @date 2018/10/26 13:49
*/
public static <T> T newInstance(Class<?> clazz) {
return (T) instantiateClass(clazz);
}
/**
* 實(shí)例化對(duì)象拧额,傳入類名對(duì)該類進(jìn)行實(shí)例化對(duì)象
*
* @param clazzStr 類名,傳入是必須傳入全路徑,com...
* @return 對(duì)象
* @author Lius
* @date 2018/10/26 13:54
*/
public static <T> T newInstance(String clazzStr) {
try {
Class<?> clazz = Class.forName(clazzStr);
return newInstance(clazz);
} catch (ClassNotFoundException e) {
throw new RuntimeException();
}
}
/**
* 把對(duì)象封裝成Map形式
*
* @param src 需要封裝的實(shí)體對(duì)象
* @author Lius
* @date 2018/10/26 14:08
*/
public static Map toMap(Object src) {
return BeanMap.create(src);
}
/**
* 把Map轉(zhuǎn)換成bean對(duì)象
*
* @author Lius
* @date 2018/10/26 14:09
*/
public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) {
// 對(duì)象實(shí)例化
T bean = BeanUtils.newInstance(valueType);
PropertyDescriptor[] propertyDescriptors = getPropertyDescriptors(valueType);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String properName = propertyDescriptor.getName();
// 過濾class屬性
if ("class".equals(properName)) {
continue;
}
if (beanMap.containsKey(properName)) {
Method writeMethod = propertyDescriptor.getWriteMethod();
if (null == writeMethod) {
continue;
}
Object value = beanMap.get(properName);
if (!writeMethod.isAccessible()) {
writeMethod.setAccessible(true);
}
try {
writeMethod.invoke(bean, value);
} catch (Throwable throwable) {
throw new RuntimeException("Could not set property '" + properName + " ' to bean" + throwable);
}
}
}
return bean;
}
public static void main(String[] args) {
// Map To Bean
Map<String, Object> map = new HashMap<String, Object>(16);
map.put("loginName", "loginName");
map.put("name", "name");
map.put("password", "password");
map.put("salt", "salt");
map.put("phone", "phone");
User user = toBean(map, User.class);
System.out.println(user.getLoginName());
// Bean To Map
User user1 = new User();
Map userMap = toMap(user1);
System.out.println(userMap);
}
}
java常用工具類(一)—— Map 與 Bean 之間的互相轉(zhuǎn)換
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門吗浩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人没隘,你說我怎么就攤上這事懂扼。” “怎么了右蒲?”我有些...
- 文/不壞的土叔 我叫張陵阀湿,是天一觀的道長。 經(jīng)常有香客問我瑰妄,道長陷嘴,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任间坐,我火速辦了婚禮灾挨,結(jié)果婚禮上邑退,老公的妹妹穿的比我還像新娘。我一直安慰自己劳澄,他們只是感情好地技,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秒拔,像睡著了一般莫矗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溯警,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伊诵!你這毒婦竟也來了单绑?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤曹宴,失蹤者是張志新(化名)和其女友劉穎搂橙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛坦,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡区转,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了版扩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片废离。...
- 正文 年R本政府宣布肖方,位于F島的核電站,受9級(jí)特大地震影響未状,放射性物質(zhì)發(fā)生泄漏窥妇。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一娩践、第九天 我趴在偏房一處隱蔽的房頂上張望活翩。 院中可真熱鬧烹骨,春花似錦、人聲如沸材泄。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽拉宗。三九已至峦树,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旦事,已是汗流浹背魁巩。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像卖鲤,于是被迫代替她去往敵國和親肾扰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 1蛋逾、Java 中的包裝類 相信各位小伙伴們對(duì)基本數(shù)據(jù)類型都非常熟悉集晚,例如 int、float区匣、double偷拔、boo...
- 陳程.長沙 第一天:建立關(guān)系-真實(shí)透明 為什么要真實(shí)透明? 真實(shí)透明是開展一段良好關(guān)系的基礎(chǔ)亏钩,會(huì)讓人覺得更加平等和...
- 今天我起床有點(diǎn)晚莲绰,因?yàn)槲易蛱焱砩蠈懲耆沼浐笥挚戳艘粫?huì)兒書,睡的有點(diǎn)晚了铸屉。 今天早上我們晨讀英語钉蒲,晨讀后數(shù)學(xué)老師說語...