java常用工具類(一)—— Map 與 Bean 之間的互相轉換
阿新 • • 發佈:2018-11-06
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 實體工具類, */ public class BeanUtils extends org.springframework.beans.BeanUtils { public BeanUtils() { } /** * 例項化物件:傳入類對類進行例項化物件 * * @param clazz 類 * @return 物件 * @author Lius * @date 2018/10/26 13:49 */ public static <T> T newInstance(Class<?> clazz) { return (T) instantiateClass(clazz); } /** * 例項化物件,傳入類名對該類進行例項化物件 * * @param clazzStr 類名,傳入是必須傳入全路徑,com... * @return 物件 * @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(); } } /** * 把物件封裝成Map形式 * * @param src 需要封裝的實體物件 * @author Lius * @date 2018/10/26 14:08 */ public static Map toMap(Object src) { return BeanMap.create(src); } /** * 把Map轉換成bean物件 * * @author Lius * @date 2018/10/26 14:09 */ public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) { // 物件例項化 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); } }