Java对象和Map互相转换的6种方式

article/2025/11/3 23:03:24

前言

开发小伙伴们通常会需要使用到对象和Map互相转换的开发场景,本文主要介绍6种方式,欲知详情,请问下文分解。

实体类:

@Data
class User {Long id;String name;Integer age;
}

1、hutool工具

官网:https://www.hutool.cn/

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
代码:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version>
</dependency>
public static void main(String[] args)  {User user= new User();user.setId(1L);user.setName("三省同学");//java转mapSystem.out.println(BeanUtil.beanToMap(user));//map转javaMap<String, Object> map = new HashMap();map.put("id", 2L);map.put("name", "三省同学2");System.out.println(BeanUtil.toBean(map, User.class));
}
{id=1, name=三省同学, age=null}
User{id=2, name='三省同学2', age=null}
  • 1
  • 2

2、commons.beanutils工具

commons-beanutils是Apache开源组织提供的用于操作JAVABEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作。

代码:

<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
 public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {User user = new User();Map<String, Object> map = new HashMap();map.put("id", 1L);map.put("name", "三省同学");//map转java对象BeanUtils.populate(user, map);System.out.println(user.toString());
//java转mapBeanMap testMap = new BeanMap(user);System.out.println(testMap);System.out.println(testMap.get("id"));}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

输出:

User{id=1, name='三省同学', age=null}
BeanMap<User{id=1, name='三省同学', age=null}>
1
  • 1
  • 2
  • 3

3、reflect反射工具

反射是一种自然现象,亦是一种光学现象。指光在传播到不同物质时,在分界面上改变传播方向又返回原来物质中的现象。

Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查。被private封装的资源只能类内部访问,外部是不行的,但反射能直接操作类私有属性。反射可以在运行时获取一个类的所有信息,(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。

什么是JAVA反射

代码:

public static void main(String[] args) throws InstantiationException, IllegalAccessException {Map<String, Object> map = new HashMap();map.put("id", 1L);map.put("name", "三省同学");
//map对象转javaClass<User> userClass = User.class;Object object = userClass.newInstance();Field[] fields = userClass.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()));}System.out.println(object);//java对象转mapMap<String, Object> map1 = new HashMap();Field[] declaredFields = object.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map1.put(field.getName(), field.get(object));}System.out.println(map1);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

结果:

User{id=1, name='三省同学', age=null}
{name=三省同学, id=1, age=null}
  • 1
  • 2

4、Json工具(推荐)

fastjson 是阿里巴巴开发的一个开源的 JSON 库,它有极快的性能,支持 json 与Collection,Map,javaBean 之间的转换,并且零依赖。

Json相关阅读
代码:

<!-- JSON 解析器和生成器 -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
public static void main(String[] args){Map<String, Object> map = new HashMap();map.put("id", 1L);map.put("name", "三省同学");//map转java对象System.out.println(JSONObject.parseObject(JSONObject.toJSONString(map), User.class));// Map<String, Object> s = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String, Object>>() {});User user = new User();user.setId(1L);user.setName("三省同学2");//java对象转mapSystem.out.println(JSONObject.parseObject(JSONObject.toJSONString(user)));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果:

User{id=1, name='三省同学', age=null}
{"name":"三省同学2","id":1}
  • 1
  • 2

5、net.sf.cglib.beans.BeanMap工具

代码:

 <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
public static void main(String[] args) throws InstantiationException, IllegalAccessException {Map<String, Object> map = new HashMap();map.put("id", 1L);map.put("name", "三省同学");//map转java对象Class<User> userClass = User.class;Object object = userClass.newInstance();BeanMap beanMap = BeanMap.create(object);beanMap.putAll(map);System.out.println(object);
User user = new User();user.setId(2L);user.setName("三省同学2");//java对象转mapMap<String, Object> map1 = new HashMap();BeanMap beanMap1 = BeanMap.create(user);for (Object key : beanMap1.keySet()) {map1.put(key + "", beanMap1.get(key));}System.out.println(map1);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

结果:

User{id=1, name='三省同学', age=null}
{name=三省同学2, id=2, age=null}
  • 1
  • 2

6、Introspector工具

代码:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, IntrospectionException, InvocationTargetException {Map<String, Object> map = new HashMap();map.put("id", 1L);map.put("name", "三省同学");//map转java对象Class<User> userClass = User.class;Object obj = userClass.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()));}}System.out.println(obj);
User user = new User();user.setId(2L);user.setName("三省同学2");//java对象转mapMap<String, Object> map1 = new HashMap();BeanInfo beanInfo1 = Introspector.getBeanInfo(user.getClass());PropertyDescriptor[] propertyDescriptors1 = beanInfo1.getPropertyDescriptors();for (PropertyDescriptor property : propertyDescriptors1) {String key = property.getName();if (key.compareToIgnoreCase("class") == 0) {continue;}Method getter = property.getReadMethod();Object value = getter != null ? getter.invoke(user) : null;map1.put(key, value);}System.out.println(map1);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

结果:

User{id=1, name='三省同学', age=null}
{name=三省同学2, id=2, age=null}
  • 1
  • 2

http://chatgpt.dhexx.cn/article/1VCxGfiP.shtml

相关文章

linux vim 强制退出 不保存

linux vim 强制退出不保存T

Docker安装及若干问题解析

按照i春秋的教程我从https://blog.csdn.net/qq_27818541/article/details/73647797这个博客获得了指导。 博客上已经注明了&#xff0c;下面两个方式任选其一&#xff0c;我这个呆子两种方法都试了。。&#xff0c;重要的文字就应该用其他颜色的笔标出来... 全部步骤用完之后&a…

小程序转发链接打开异常(链接有中文)

小程序转发出去的链接参数里面有中文的话&#xff0c;点击打开页面异常,因为链接参数异常&#xff0c;导致接口获取数据异常&#xff0c;然后页面无法正常显示 这是因为中文在转发的时候让http协议自动进行了url转码&#xff0c;转成了一串这种形式的字母%e8%bd%ac%e7%a0%81%e6…

微信小程序 转发 分享功能(二)

关于小程序的转发&#xff1a; 最简单的就是点击小程序右上角菜单“转发”按钮直接分享&#xff0c;不过这种分享有点不太友好&#xff0c;实用性也不强。 当然&#xff0c;你可以自定义分享内容&#xff0c;包括标题&#xff0c;简介&#xff0c;图片及分享的小程序页面路径。…

微信小程序转发中文出现乱码

微信小程序转发中文出现乱码 在开发项目的过程中出现转发bug&#xff0c;转发给其他用户时点开界面出现乱码 界面参数由父界面传输 原因 在网上查了一圈&#xff0c;是说微信小程序的编码方式并非UTF8&#xff0c;所以导致出现乱码 解决方案 使用Js的decodeURI&#xff0…

微信小程序转发动态消息的问题

最近项目中需要用到微信小程序转发动态消息的功能&#xff0c;遇到了一些坑&#xff0c;最终测试成功了&#xff0c;现在分享给大家。 微信官方的动态消息参考文档在这里&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatabl…

关于小程序转发分享功能,并实现计数埋点方式

小程序分享 前言思路关于分享关于计数埋点 效果使用page分享全局分享单页分享 使用Component组件分享全局分享单页面分享 计数埋点 前言 之前做的分享都是单页面分享&#xff0c;现在发现公司需要做所有页面的分享&#xff0c;然后指定页面和全局不一样&#xff0c;并且实现记…

微信小程序转发

微信小程序转发涉及以下4个方法: 1、Page.onShareAppMessage({}) 设置右上角“转发”配置,及转发后回调函数返回 shareTicket 票据 2、wx.showSahreMenu() 用户点击右上角后,显示“转发”按钮 3、wx.hideShareMenu() 隐藏转发按钮,无视 Page.onShareAppMessage({}) …

(干货)微信小程序转发好友

今天简单地说下微信小程序的转发功能&#xff0c;为什么要简单的说下呢&#xff0c;因为主要讲的就是转发给好友或者群组&#xff0c;还有一种是分享到朋友圈&#xff0c;这种就比较复杂一点了&#xff0c;先稍微透漏一点&#xff0c;分享到朋友圈主要是两种方法&#xff0c;一…

微信小程序 转发

微信小程序的转发分两张情况 1.自定义的转发按钮 2.小程序自带的右上角的转发按钮 小程序 API https://developers.weixin.qq.com/miniprogram/dev/api/share.html 下图是自定义的转发按钮 xml <view classfl stylewidth:55rpx;height:55rpx;margin-left:50%; margin…

小程序分享功能实现php,微信小程序转发好友的功能

今天简单地说下微信小程序的转发功能&#xff0c;为什么要简单的说下呢&#xff0c;因为主要讲的就是转发给好友或者群组&#xff0c;还有一种是分享到朋友圈&#xff0c;这种就比较复杂一点了&#xff0c;先稍微透漏一点&#xff0c;分享到朋友圈主要是两种方法&#xff0c;一…

微信小程序转发朋友圈

微信小程序转发朋友圈 接触过微信小程序的都应该知道微信小程序只开辟了一个转发给好友和群的api&#xff0c;如果想发送到朋友圈&#xff0c;方法大同小异&#xff0c;无非就是保存图片到本机 然后在进行朋友圈发表&#xff0c;话不多说&#xff0c;先上图&#xff0c;然后上…

unapp微信小程序转发分享、携带参数

一、第一种方式&#xff1a; // 开启小程序原生右上角分享按钮uni.showShareMenu({// https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.htmlwithShareTicket: true,menus: [shareAppMessage, shareTimeline]//开启转发好友和转发朋友圈按钮});…

SQLServer2008 sa登录错误18456

基本每次重装数据库&#xff0c;使用sa身份和ip方式登录数据库&#xff0c;不出意外都会出现这个错误&#xff0c;18456&#xff0c;如下&#xff1a; 这个错误一般由三个原因引起&#xff0c;登录方式设置错误、sa设置错误和IP方式是否开启&#xff0c;下面依次解决这三个问题…

SQL Server2014“用户'sa'登录失败,错误18456”问题

子丰在安装SQL Server2014的过程中明明选择了使用Windows身份验证和SQL Server身份验证混合模式&#xff0c;可是安装完之后却不能使用SQL Server身份验证登录&#xff0c;提示“用户sa登录失败&#xff0c;错误18456”。 经过子丰一番研究才最终解决了问题。 1. 使用Windows身…

【SQL Server 2017】18456错误/管道的另一端无任何进程错误 解决方法

解决方法 windows身份登录后&#xff0c;找到&#xff1a;安全性->登录名->sa&#xff0c;然后右击选择属性 选择常规&#xff08;输入新的密码&#xff0c;取消实施密码策略&#xff09; 右击服务器名——重新启动——关闭数据库连接&#xff0c;退出程序——用sa登录…

SQL 18456登陆错误问题(已解决)

SQL 18456登陆错误 首先要将登陆验证方式改为混合验证 参考链接&#xff1a;https://blog.csdn.net/qq_34173893/article/details/80142959 解决方案&#xff1a;https://www.cnblogs.com/giserblog/p/3585442.html?utm_sourcetuicool 取消登陆锁定 如果遇到取消失败的情况&am…

SQLServer创建用户登录出现错误18456

使用SQLServer创建用户并登录的过程中总是出现问题&#xff0c;查找方法不易&#xff0c;于是就打算把解决方法写一下&#xff0c;方便后来的小伙伴查找 1、在本机数据库处右键&#xff0c;选择属性&#xff0c;点击打开 选择左侧的安全性&#xff0c;右侧服务器身份验证选择S…

SQLSERVER2008 18456错误

百度搜18456错误几乎只能搜到一篇文章&#xff0c;并不是说结果条数&#xff0c;而是所有的文章都是转自一处。我也遇到了18456错误。 我是这么解决的&#xff1a; 1、以windows验证模式进入数据库管理器。 第二步&#xff1a;右击sa&#xff0c;选择属性&#xff1a; 在常规选…

SQL Server 2008 R2用户'sa'登录失败(错误18456)

今天想把公司的数据库放到自己的电脑上&#xff0c;结果&#xff0c;登录SQL server 2008R2 报错了&#xff1a; 用Windows身份可以登录。为了能继续使用sa用户登录&#xff0c;可以这样做&#xff1a; 1、首先用widnows身份登录 2、右键实例-->属性&#xff0c; 3、选择【…