一、說明
平時日常Java開發,經常會涉及到Java Bean和Map之間的類型轉換,當然項目裏或者第三方jar都提供了各種實現api,這裏主要通過Java代碼,非工具類來實現這兩者之間的轉換。
文中用到的Logger是slf4j-api-1.7.25.jar架包 網盤直接下載 https://pan.baidu.com/s/122siUCAQwZ55kYfdoD97sA
可到Maven官網搜索 "org.slf4j » slf4j-api" 依賴下載所需版本 https://mvnrepository.com/
二、代碼實現
轉換關係有以下四種
bean To map
map To bean
listBean To listMap
listMap To listBean
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 非工具類Java bean and map 互轉方法代碼
* @author Justin
*
*/
public class BeanAndMapConvertUtil {
private static Logger logger = LoggerFactory.getLogger(BeanAndMapConvertUtil.class);
/**
* bean To map
* @param object
* @return
*/
public static Map<String, Object> beanToMap(Object object) {
Map<String, Object> map = new HashMap<String,Object>();
for (Field field : object.getClass().getDeclaredFields()){
try {
boolean flag = field.isAccessible();
field.setAccessible(true);
Object obj = field.get(object);
map.put(field.getName(), obj);
field.setAccessible(flag);
} catch (Exception e) {
logger.error("convertBeanToMap Error {}" ,e);
}
}
return map;
}
/**
* map To bean
* @param map
* @param bean
* @return
*/
public static <T> T mapToBean(Map<String, Object> map, Class<T> bean) {
T t = null;
try {
t = bean.newInstance();
for(Field field : bean.getDeclaredFields()) {
if (map.containsKey(field.getName())) {
boolean flag = field.isAccessible();
field.setAccessible(true);
Object obj = map.get(field.getName());
if (null != obj && field.getType().isAssignableFrom(obj.getClass())) {
field.set(t, obj);
}
field.setAccessible(flag);
}
}
} catch (Exception e) {
logger.error("convertMapToBean Error {}" ,e);
e.printStackTrace();
}
return t;
}
/**
* listBean To listMap
* @param listBean
* @return
*/
public static <T> List<Map<String,Object>> listBeanToListMap(List<T> listBean){
if(null == listBean) throw new NullPointerException("listBean is null");
List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
for(T t : listBean){
listMap.add(beanToMap(t));
}
return listMap;
}
/**
* listMap To listBean
* @param listMap
* @return
*/
public static <T> List<T> listMapToListBean(List<Map<String,Object>> listMap,Class<T> clazz){
if(null == listMap) throw new NullPointerException("listMap is null");
List<T> listBean = new ArrayList<T>();
for(Map<String,Object> map : listMap){
listBean.add(mapToBean(map, clazz));
}
return listBean;
}
public static void main(String[] args) {
System.out.println("===========bean to map===========");
Student bean = new Student("1001","張三","男",22);
Map<String, Object> map = beanToMap(bean);
System.out.println(map.toString());
System.out.println("===========map to bean===========");
Student mapToBean = mapToBean(map, Student.class);
System.out.println(mapToBean.toString());
System.out.println("===========listBean to listMap===========");
List<Student> listBean = new ArrayList<Student>();
listBean.add(bean);
List<Map<String, Object>> listBeanToListMap = new ArrayList<Map<String, Object>>();
listBeanToListMap = listBeanToListMap(listBean);
System.out.println(listBeanToListMap.toString());
System.out.println("===========listMap to listBean===========");
List<Student> listMapToListBean = new ArrayList<Student>();
listMapToListBean = listMapToListBean(listBeanToListMap, Student.class);
System.out.println(listMapToListBean.toString());
}
}