1.BeanUntils工具类的准备

/**
* @ClassName: BeanUtils
* @Description:
* @Author: songwp
* @Date: 9:02 2022/5/19
**/
public class BeanUtils { /**
* 将javaBean转换成Map
* @param bean
* @return
* @throws Exception
*/
public static Map<String,Object> beanToMap(Object bean) throws Exception {
Map<String,Object> map = new HashMap<>();
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
String name = pd.getName();
Object value = pd.getReadMethod().invoke(bean);
map.put(name,value);
}
return map;
} /**
* 将Map转成javaBean
* @param map
* @param beanType
* @param <T>
* @return
* @throws Exception
*/
public static <T> T mapToBean(Map<String,Object> map,Class<T> beanType) throws Exception {
// 创建javaBean对象
Object obj = beanType.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(beanType, Object.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
// 从Map中获取属性同名的key值
Object value = map.get(pd.getName());
// 调用setter方法设置属性值
pd.getWriteMethod().invoke(obj,value);
}
return (T)obj;
}
}

2.方法测试调用

注意:User 和 Person实体需要自己创建(person的属性和map中的key要有对应)

/**
* @ClassName: Test9
* @Description:
* @Author: songwp
* @Date: 9:23 2022/5/19
**/
public class Test9 { public static void main(String[] args) throws Exception {
//1.map转JavaBean
Map<String,Object> map = new HashMap<>();
map.put("name","李四");
map.put("age","28");
map.put("address","陕西西安");
Object user1 = BeanUtils.mapToBean(map, Person.class);
System.out.println(user1); System.out.println("================================================================"); //2. javabean转map
User user = new User();
user.setId("10001");
user.setStatus(0);
user.setPhone("18740458584");
user.setNickname("张三");
Map<String, Object> map1 = BeanUtils.beanToMap(user);
System.out.println(map1);
}
}

3.结果如下:

-----------------------------------------------------------------------------
Person(name=李四, age=28, address=陕西西安)
================================================================
{birthday=null, password=null, gender=null, phone=18740458584, nickname=张三, remark=null, id=10001, age=null, status=0, username=null}
-----------------------------------------------------------------------------

java反射之-Javabean与Map的互转的更多相关文章

  1. 基于java反射的javabean和map相互转换的工具类

    话不多说,代码如下 package com.study; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...

  2. 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

    有时遇到将数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串 packag ...

  3. 通过java反射得到javabean的属性名称和值参考

    通过java反射得到javabean的属性名称和值 Field fields[]=cHis.getClass().getDeclaredFields();//cHis 是实体类名称 String[] ...

  4. 用反射实现JavaBean和Map之间的转换

    学习内容: 需求 由于JavaBean结构与Map类似,我们可以把JavaBean与Map进行转换 代码如下: package com.yy; import java.beans.BeanInfo; ...

  5. Java 反射实现实体转Map时,父类元素丢失

    public class BeanToMap { public static Map<String, Object> ConvertObjToMap(Object obj) { Map&l ...

  6. 基于Java反射的map自动装配JavaBean工具类设计

    我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...

  7. javaBean与Map<String,Object>互转

    背景:有时候想不通阿帕奇的BeanUtils是怎么进行map和Bean互相转化的. 工作闲暇之余,自己写个一小段代码,一探究竟,试试才发现,原来一切并非我们想的那么什么和复杂. 注:这里只是简单实例, ...

  8. Json、JavaBean、Map、XML之间的互转

    思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...

  9. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean

    在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...

随机推荐

  1. JavaWeb学习day2-web入门&随笔

    Tomcat详解: 1默认端口号: Tomcat:8080 Mysql:3306 http:80 https:443 2默认主机名:localhost 地址:127.0.0.1 3网站应用默认存放位置 ...

  2. SimpleDateFormat类的安全问题,这6个方案总有一个适合你

    摘要:你使用的SimpleDateFormat类还安全吗?为什么说SimpleDateFormat类不是线程安全的?带着问题从本文中寻求答案. 本文分享自华为云社区<[高并发]SimpleDat ...

  3. Educational Codeforces Round 121 (Rated for Div. 2)——B - Minor Reduction

    B - Minor Reduction 题源:https://codeforces.com/contest/1626/problem/B 题意 给定一个超级大的整数 x ,可以对任意相邻两位数进行操作 ...

  4. python基础练习题(题目 求输入数字的平方,如果平方运算后小于 50 则退出)

    day32 --------------------------------------------------------------- 实例046:打破循环 题目 求输入数字的平方,如果平方运算后 ...

  5. Redis为什么变慢了?透彻解读如何排查Redis性能问题

    Redis 作为优秀的内存数据库,其拥有非常高的性能,单个实例的 OPS 能够达到 10W 左右.但也正因此如此,当我们在使用 Redis 时,如果发现操作延迟变大的情况,就会与我们的预期不符. 你也 ...

  6. python学习-Day19

    目录 今日内容详细 正则表达式 开端 概念及相关符号 正则表达式之字符组 正则表达式之特殊符号 正则表达式之量词 小试牛刀 实现手机号码校验功能 复杂正则的编写 校验用户身份证号码 校验邮箱.快递单号 ...

  7. XCTF练习题---WEB---robots

    XCTF练习题---WEB---robots flag:cyberpeace{6c4b08933075fc620d16d1157ee07a7e} 解题步骤: 1.观察题目,打开场景 2.打开实验场景, ...

  8. create-react-app的TS支持以及css模块化

    开始: 利用官方脚手架,搭建react工程.参考:https://react.docschina.org/docs/create-a-new-react-app.html. 过程: 1.暴露webpa ...

  9. Cesium DrawCommand [1] 不谈地球 画个三角形

    目录 0. 前言 0.1. 源码中的 DrawCommand 1. 创建 1.1. 构成要素 - VertexArray 1.2. 构成要素 - ShaderProgram 1.3. 构成要素 - W ...

  10. 红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广...

    链接:https://reurl.cc/g8ke9X 红旗Linux桌面操作系统11将于1月10日开放预览版的下载,新版本具有良好的硬件兼容,支持多款国产自主CPU品牌,同时还具有丰富的外设支持及海量 ...