最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn)

 更新時(shí)間:2020年07月10日 11:11:48   作者:流云一號(hào)  
這篇文章主要介紹了java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

最近,研究map與java對(duì)象之間的相互轉(zhuǎn)換,總結(jié)了5種方法:

第一種:使用org.apache.commons.beanutils轉(zhuǎn)換

用到的主要jar包:commons-beanutils-1.9.3.jar

//map轉(zhuǎn)java對(duì)象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)
  throws Exception {
 if (map == null) {
  return null;
 }
 Object obj = beanClass.newInstance();
 BeanUtils.populate(obj, map);
 return obj;
 }
 
//java對(duì)象轉(zhuǎn)map
public static Map<?, ?> objectToMap(Object obj) {
 if (obj == null)
  return null;
 return new BeanMap(obj);
 }

在使用該方法進(jìn)行java對(duì)象轉(zhuǎn)map時(shí),可能會(huì)發(fā)生以下錯(cuò)誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformer
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
 at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 at org.apache.commons.beanutils.BeanMap.createTypeTransformers(BeanMap.java:132)
 at org.apache.commons.beanutils.BeanMap.<clinit>(BeanMap.java:68)
 at com.example2.pojo.PojoToMap.objectToMap(PojoToMap.java:23)
 at com.example2.pojo.PojoToMap.main(PojoToMap.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 ... 16 more

解決方法見(jiàn)本人的另一篇文章:http://www.fzitv.net/article/190471.htm

第二種:使用Introspector轉(zhuǎn)換

//map轉(zhuǎn)java對(duì)象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
    if (map == null)
      return null;
    Object obj = beanClass.newInstance();
    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor property : propertyDescriptors) {
      Method setter = property.getWriteMethod();
      if (setter != null) {
        setter.invoke(obj, map.get(property.getName()));
      }
    }
    return obj;
  }
 
//java對(duì)象轉(zhuǎn)map
public static Map<String, Object> objectToMap(Object obj) throws Exception {
 if (obj == null) {
 return null;
 }
 Map<String, Object> map = new HashMap<String, Object>();
 BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
 PropertyDescriptor[] propertyDescriptors = beanInfo
  .getPropertyDescriptors();
 for (PropertyDescriptor property : propertyDescriptors) {
 String key = property.getName();
 if (key.compareToIgnoreCase("class") == 0) {
  continue;
 }
 Method getter = property.getReadMethod();
 Object value = getter != null ? getter.invoke(obj) : null;
 map.put(key, value);
 }
 return map;
}

第三種:使用reflect轉(zhuǎn)換

//map轉(zhuǎn)java對(duì)象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
    if (map == null) {
      return null;
    }
    Object object = beanClass.newInstance();
    Field[] fields = beanClass.getDeclaredFields();
    for (Field field : fields) {
      int mod = field.getModifiers();
      if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) {
        continue;
      }
      field.setAccessible(true);
      field.set(object, map.get(field.getName()));
    }
    return object;
  }
 
//java對(duì)象轉(zhuǎn)map
public static Map<String, Object> objectToMap(Object obj) throws Exception {
 if (obj == null) {
 return null;
 }
 Map<String, Object> map = new HashMap<String, Object>();
 Field[] declaredFields = obj.getClass().getDeclaredFields();
 for (Field field : declaredFields) {
 field.setAccessible(true);
 map.put(field.getName(), field.get(obj));
 }
 return map;
}

第四種:使用net.sf.cglib.beans.BeanMap轉(zhuǎn)換

用到的主要jar包:cglib-2.2.2.jar

//map轉(zhuǎn)java對(duì)象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
  Object object = beanClass.newInstance();
  BeanMap beanMap = BeanMap.create(object);
  beanMap.putAll(map);
  return object;
}
 
//java對(duì)象轉(zhuǎn)map
public static Map<String, Object> objectToMap(Object obj) {
  Map<String, Object> map = Maps.newHashMap();
  if (obj != null) {
    BeanMap beanMap = BeanMap.create(obj);
    for (Object key : beanMap.keySet()) {
      map.put(key + "", beanMap.get(key));
    }
  }
  return map;
}

在使用本方法進(jìn)行map轉(zhuǎn)java對(duì)象時(shí),可能會(huì)發(fā)生以下錯(cuò)誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
 at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:184)
 at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66)
 at net.sf.cglib.beans.BeanMap$Generator.<clinit>(BeanMap.java:64)
 at net.sf.cglib.beans.BeanMap.create(BeanMap.java:56)
 at com.example2.pojo.MapToPojo.mapToBean(MapToPojo.java:27)
 at com.example2.pojo.MapToPojo.main(MapToPojo.java:18)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 ... 6 more

解決方法見(jiàn)本人的另一篇文章:http://www.fzitv.net/article/190474.htm

第五種:使用json轉(zhuǎn)換

用到的主要jar包:fastjson-1.2.54.jar

//map轉(zhuǎn)java對(duì)象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
  String jsonStr = JSONObject.toJSONString(map);
  return JSONObject.parseObject(jsonStr, beanClass);
}
 
//java對(duì)象轉(zhuǎn)map
public static Map<String, Object> objectToMap(Object obj) {
  String jsonStr = JSONObject.toJSONString(obj);
  return JSONObject.parseObject(jsonStr);
}

以上方法本人均實(shí)際測(cè)試通過(guò)。到此這篇關(guān)于java中實(shí)現(xiàn)map與對(duì)象相互轉(zhuǎn)換的幾種實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)java map與對(duì)象相互轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    這篇文章主要介紹了Win11如何下載安裝java,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • IDEA如何對(duì)多線程進(jìn)行debug的示例詳解

    IDEA如何對(duì)多線程進(jìn)行debug的示例詳解

    開(kāi)發(fā)中使用到多線程的時(shí)候不少,但是debug起來(lái)還是比較困難的,因?yàn)槟J(rèn)每次只會(huì)進(jìn)入一個(gè)線程,這樣有些問(wèn)題是發(fā)現(xiàn)不了的,其實(shí)IDEA也是支持進(jìn)入每個(gè)線程來(lái)debug的,本文給大家介紹了IDEA如何對(duì)多線程進(jìn)行debug的示例,需要的朋友可以參考下
    2024-05-05
  • Java利用DOM解析XML的學(xué)習(xí)指南

    Java利用DOM解析XML的學(xué)習(xí)指南

    在Java中使用DOM解析XML文件是一個(gè)常見(jiàn)的操作,它允許你以編程方式讀取、修改和保存XML文檔的結(jié)構(gòu)和內(nèi)容,本文為大家介紹了具體的實(shí)現(xiàn)步驟,有需要的小伙伴可以參考下
    2025-04-04
  • Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡的解決方案

    Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡的解決方案

    Spring?Cloud?Alibaba?致力于提供微服務(wù)開(kāi)發(fā)的一站式解決方案,此項(xiàng)目包含開(kāi)發(fā)分布式應(yīng)用微服務(wù)的必需組件,這篇文章主要介紹了Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡,需要的朋友可以參考下
    2024-05-05
  • Spring中Eureka的服務(wù)下線詳解

    Spring中Eureka的服務(wù)下線詳解

    這篇文章主要介紹了Spring中Eureka的服務(wù)下線詳解,根據(jù)默認(rèn)的策略,如果在一定的時(shí)間內(nèi),客戶端沒(méi)有向注冊(cè)中心發(fā)送續(xù)約請(qǐng)求,那么注冊(cè)中心就會(huì)將該實(shí)例從注冊(cè)中心移除,需要的朋友可以參考下
    2023-11-11
  • @PathVariable獲取路徑中帶有 / 斜杠的解決方案

    @PathVariable獲取路徑中帶有 / 斜杠的解決方案

    這篇文章主要介紹了@PathVariable獲取路徑中帶有 / 斜杠的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot中如何進(jìn)行全局異常處理方式

    SpringBoot中如何進(jìn)行全局異常處理方式

    在SpringBoot開(kāi)發(fā)過(guò)程中,全局異常處理能提高程序的魯棒性并降低代碼耦合,通過(guò)使用@RestControllerAdvice和@ExceptionHandler注解,可以實(shí)現(xiàn)對(duì)程序異常的全局?jǐn)r截和處理,首先需要自定義一個(gè)繼承自ResponseEntityExceptionHandler的異常處理類
    2024-11-11
  • Springboot配置Swagger2登錄密碼的實(shí)現(xiàn)

    Springboot配置Swagger2登錄密碼的實(shí)現(xiàn)

    本文主要介紹了Springboot配置Swagger2登錄密碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)

    Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)

    下面小編就為大家?guī)?lái)一篇Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • SpringBoot實(shí)現(xiàn)Mysql使用MD5進(jìn)行密碼加密的示例

    SpringBoot實(shí)現(xiàn)Mysql使用MD5進(jìn)行密碼加密的示例

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)Mysql使用MD5進(jìn)行密碼加密的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

石景山区| 张家界市| 吴桥县| 诸城市| 邹平县| 滕州市| 南京市| 鸡泽县| 枣强县| 尉犁县| 南澳县| 林西县| 龙岩市| 镇沅| 阳曲县| 蒲江县| 绩溪县| 玉龙| 石首市| 五原县| 封开县| 侯马市| 昌宁县| 灌南县| 江川县| 方山县| 鹤峰县| 鄯善县| 泰来县| 云浮市| 马鞍山市| 巧家县| 新河县| 噶尔县| 汾阳市| 余干县| 壤塘县| 中宁县| 景宁| 中方县| 营山县|