转换实体类_利用Java反射机制进行Map和JavaBean间转换
Java中利用反射進行Map和JavaBean間轉換
在日常工作中,有時候我們可能會遇到以下這樣的情況發生。
例如:
(1)后端接受一個參數Map param(可能是前端form維護的一個對象...)。
(2)將一個對象個別屬性(key)和對應值(value)存放到Map對象中。
(3).......
針對上面情況:
1、對于對象屬性較少時還是比較方便操作,可以手動寫入解決。
2、如果是屬性特別多(幾十、甚至上百個字段),用到的地方也特別多時,再手動寫的話就有點繁瑣。
這里給大家推薦一個方法:
利用反射進行Map和JavaBean間轉換
案例:
(1)下面是一個比較常見JavaBean。
以Student為例,屬性、構造器、set/get、toString......
(2) 工具類MapAndJavaBeanUtil
方法:將Map轉化為JavaBean
主要利用java反射的機制(此篇不針對反射)。
Field類:封裝了對象屬性信息。
//獲取對象的屬性fields數組
Field[] fields = obj.getClass().getDeclaredFields();
//設置對象屬性名 屬性值
field.set(obj, map.get(field.getName()));
(3) 方法:將Object轉化為Map
與(2)同理。
(4) 測試
如果大家還有其他方法歡迎評論留言,共同進步,感謝支持。
源碼貼在下面或者大家可以私信留言。
MapAndJavaBeanUtil 工具類
package util;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
public class MapAndJavaBeanUtil {
/**
* 將map轉化為JavaBean
* @param map
* @param clazz
* @return
*/
public static Object mapToObject(Map map,Class> clazz) {
if(map == null) return null;
Object obj = null;
try {
obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
//設置對象的屬性名 屬性值
field.set(obj, map.get(field.getName()));
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 將object轉化為map
* @param obj
* @return
*/
public static Map ObjectToMap(Object obj) {
if(obj == null)return null;
Map map = new HashMap<>();
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
//破壞封裝(private)
field.setAccessible(true);
//屬性名 屬性值
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
Student實體類
package entity;
import java.util.Date;
public class Student {
private String pkid;
private Integer sno;
private String sname;
private Date date;
public Student() {}
public Student(String pkid, Integer sno, String sname, Date date) {
super();
this.pkid = pkid;
this.sno = sno;
this.sname = sname;
this.date = date;
}
public String getPkid() {
return pkid;
}
public void setPkid(String pkid) {
this.pkid = pkid;
}
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "Student [pkid=" + pkid +
總結
以上是生活随笔為你收集整理的转换实体类_利用Java反射机制进行Map和JavaBean间转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字体编辑器_FontLab 7 ——字体
- 下一篇: java美元兑换,(Java实现) 美元