java对象转map_java中实现map与对象相互转换的几种实现

java对象转map_java中实现map与对象相互转换的几种实现最近,研究map与java对象之间的相互转换,总结了5种方法:第一种:使用org.apache.commons.beanutils转换用到的主要jar包:commons-beanutils-1.9.3.jar//map转java对象publicstaticObjectmapToObject(Mapmap,Class>beanClass)throwsException{if(…

大家好,又见面了,我是你们的朋友全栈君。

最近,研究map与java对象之间的相互转换,总结了5种方法:

第一种:使用org.apache.commons.beanutils转换

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

//map转java对象

public static Object mapToObject(Map map, Class> beanClass)

throws Exception {

if (map == null) {

return null;

}

Object obj = beanClass.newInstance();

BeanUtils.populate(obj, map);

return obj;

}

//java对象转map

public static Map, ?> objectToMap(Object obj) {

if (obj == null)

return null;

return new BeanMap(obj);

}

在使用该方法进行java对象转map时,可能会发生以下错误:

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.(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

第二种:使用Introspector转换

//map转java对象

public static Object mapToObject(Map 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对象转map

public static Map objectToMap(Object obj) throws Exception {

if (obj == null) {

return null;

}

Map map = new HashMap();

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转换

//map转java对象

public static Object mapToObject(Map 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对象转map

public static Map objectToMap(Object obj) throws Exception {

if (obj == null) {

return null;

}

Map map = new HashMap();

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转换

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

//map转java对象

public static Object mapToObject(Map map, Class> beanClass) throws Exception {

Object object = beanClass.newInstance();

BeanMap beanMap = BeanMap.create(object);

beanMap.putAll(map);

return object;

}

//java对象转map

public static Map objectToMap(Object obj) {

Map map = Maps.newHashMap();

if (obj != null) {

BeanMap beanMap = BeanMap.create(obj);

for (Object key : beanMap.keySet()) {

map.put(key + “”, beanMap.get(key));

}

}

return map;

}

在使用本方法进行map转java对象时,可能会发生以下错误:

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.(KeyFactory.java:66)

at net.sf.cglib.beans.BeanMap$Generator.(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

第五种:使用json转换

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

//map转java对象

public static Object mapToObject(Map map, Class> beanClass) throws Exception {

String jsonStr = JSONObject.toJSONString(map);

return JSONObject.parseObject(jsonStr, beanClass);

}

//java对象转map

public static Map objectToMap(Object obj) {

String jsonStr = JSONObject.toJSONString(obj);

return JSONObject.parseObject(jsonStr);

}

以上方法本人均实际测试通过。到此这篇关于java中实现map与对象相互转换的几种实现的文章就介绍到这了,更多相关java map与对象相互转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135572.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python之数学(math)和随机数(random)

    math包包含了最基本的数学运算函数,如果想要更加高级的数学功能,可以使用标准库外的numpy和scipy库,他们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用random包可以用来生成

    2021年12月18日
  • 服务器四通道内存性能提升,四通道内存性能怎么样

    服务器四通道内存性能提升,四通道内存性能怎么样四通道的内存有提升,但是性价比不是很好,如果是发烧友那不需要考虑什么了,如果是实用主义者四通道带来的性能的提升可能不会在使用中有太多的明显的感受。组建四通道内存很简单,有足够的内存条卡槽,X79的芯片组,i7-3960K的处理器,Apacer宇瞻猎豹DDR3-16002GB*4或者海盗船DDR316002GB*4的内存条就可以了,当然其他品牌的内存条也可以,这里只是举例,四条一样…

  • J2SE初识「建议收藏」

    J2SE初识「建议收藏」什么是J2SE?J2SE和Java有什么关系?什么是Java2?这三者有什么联系?为什么要有Java2?J2SE?我用一张图来解释其实Java2是Java的第二代J2SE是Java2的标准版,主要用于桌面应用软件的编程J2EE是Java2的企业版,主要用户分布式的网络程序开发,比如电子商务网站J2ME是Java2的微缩版,主要

    2022年10月31日
  • 【经验总结—2】:深度学习数据集下载网站总结[通俗易懂]

    【经验总结—2】:深度学习数据集下载网站总结[通俗易懂]数据集是深度学习的基础,深度学习模型的好坏与数据集有着直接关联,这里给出一些搜索数据集的优秀网站,记得要一键三连哦!!1.CVDatasetsontheweb一个非常全的数据集总结网站,里面包含了目标检测、目标分类、目标识别、目标跟踪、语义分割、人体姿态数据集等。2.YetAnotherComputerVisionIndexToDatasets(YACVID)全,啥都有!3.阿里天池数据集不得不说,阿里nb!数据集种类丰富,分类明晰!不止如此,阿里每年都

  • Mac Python第三方库安装「建议收藏」

    Mac Python第三方库安装「建议收藏」安装方式有两种:(1)PyCharm自带的package管理工具(2)终端pip3安装;例如要安装:requests库一、使用PyCharm自带的package管理工具进行安装:Preferences->Project->ProjectInterpreter,点击左下角的“+”直接搜索requests,安装(2)终端输入:$…

    2022年10月10日
  • ICE初识

    ICE初识
    ICE:InternetCommunicationsEngine
    一种适用于异种环境的面向对象中间件平台
    他为我们提供了除DCOM,CORBA,JAVARMI,.NETRemoting,WebService,SOAPRPC以外的一种远程调用方式。
    更重要的是ICE是一种跨操作系统跨语言的远程调用方式(支持.NET1.1MONO1.0)。

    主页在:http://www.zeroc.com/index.html

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号