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. MySQL 数据库备份脚本

    MySQL 数据库备份脚本 #!/bin/bash # 数据库连接信息 DB_HOST="127.0.0.1" DB_PORT="3306" DB_USER=& ...

  2. 面试突击41:notify是随机唤醒吗?

    做 Java 开发的小伙伴,对 wait 方法和 notify 方法应该都比较熟悉,这两个方法在线程通讯中使用的频率非常高,但对于 notify 方法的唤醒顺序,有很多小伙伴的理解都是错误的,有很多人 ...

  3. 基于知名微服务框架go-micro开发gRPC应用程序

    go-micro是golang的一个微服务框架. go-micro各个版本之间的兼容性问题一直被诟病,前几年go-micro更是分化出了两个分支: 一个延续了go-micro,只不过转到了其公司CEO ...

  4. vue2响应式原理与vue3响应式原理对比

    VUE2.0 核心 对象:通过Object.defineProtytype()对对象的已有属性值的读取和修改进行劫持 数组:通过重写数组更新数组一系列更新元素的方法来实现元素的修改的劫持 Object ...

  5. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  6. iptables系列教程(一)| iptables入门篇

    一个执着于技术的公众号 前言 在早期的 Linux 系统中,默认使用的是 iptables 配置防火墙.尽管新型 的 firewalld 防火墙已经被投入使用多年,但是大量的企业在生产环境中依然出于各 ...

  7. HamsterBear Linux Low Res ADC按键驱动的适配 + LVGL button移植

    HamsterBear lradc按键驱动的适配 平台 - F1C200s Linux版本 - 5.17.2 ADC按键 - 4 KEY tablet 驱动程序位于主线内核: drivers/inpu ...

  8. 项目完成小结 - Django3.x版本 - 开发部署小结 (2)

    前言 好久没更新博客了,最近依然是在做之前博客说的这个项目:项目完成 - 基于Django3.x版本 - 开发部署小结 这项目因为前期工作出了问题,需求没确定好,导致了现在要做很多麻烦的工作,搞得大家 ...

  9. html5 tts(文字朗读)

    在 chrome 下使用比较好的中文语音包. 注意 speechSynthesis.getVoices() 有时候可能会返回空数组,需要做验证 var zhCnLangs = speechSynthe ...

  10. install dns server on ubuntu

    参考 CSDN/Ubuntu环境下安装和配置DNS服务器 在 Ubuntu 上安裝 DNS server Install BIND 9 on Ubuntu and Configure It for U ...