Map和Bean互转(Java)

map与java bean相互转换 map与java对象的相互转换1. 使用org.apache.commons.beanutils转换2. 使用Introspector转换3. 使用reflect转换4. 使用net.sf.cglib.beans.BeanMap转换5. 使用fastjson转换 1. 使用org.apache.commons.beanutils转换 pom.xml <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils - 阅读详情

1. map转bean

今天要写一个Map转Bean的,忘记了原来写的时候用的什么类,百度了很多也没找到,废了九牛二虎之力找到了,Mark一下,以备之后使用。

import org.apache.commons.beanutils.ConvertUtils;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
//导入的核心包
public class TransUtils{

    public static <T> T mapToDomain(Map<String, Object> map, Class<T> tClass) {
        try {
            T t = tClass.newInstance();

            BeanInfo beanInfo = Introspector.getBeanInfo(tClass);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

            for (PropertyDescriptor property : propertyDescriptors) {

                String key = property.getName();
                if ("class".equals(key)) {
                    continue;
                }

                String sqlField = CamelAndLowerUpperTrans.camelToUnderscore(key);


                if (map.containsKey(sqlField)) {

                    try {
                        Object value = map.get(sqlField);
                        // 得到property对应的setter方法
                        Method setter = property.getWriteMethod();
                        Class<?> type = property.getPropertyType();
                        // 强转为字段的类型,不需要时可以去除,依赖commons-beanutilss-beanutils
                        //Object convert = ConvertUtils.convert(String.valueOf(value), type);
                        //setter.invoke(t, convert);
                        setter.invoke(t, value);
                    } catch (Exception e) {
                        throw new RuntimeException("【赋值异常】", e);
                    }
                }

            }

            return t;
        } catch (Exception e) {
            throw new RuntimeException("【Map转换实体异常】", e);
        }
    }
}

其中驼峰和下划线格式命令互转的工具类如下(Mysql字段和Bean的属性名定义不一致,如:sound_avg与soundAvg的互转)

public class CamelAndLowerUpperTrans {

    public static String underscoreToCamel(String name) {
        StringBuilder sb = new StringBuilder();
        String[] splits = name.split("_");
        String part;
        for (int i = 0; i < splits.length; i++) {
            part = splits[i];
            if( i > 0) {
                part = part.substring(0, 1).toUpperCase() + part.substring(1);
            }
            sb.append(part);
        }

        return sb.toString();
    }

    public static String camelToUnderscore(String name) {
        if (name == null && name.length() <= 0) {
            return name;
        }
        StringBuilder sb = new StringBuilder();
        String lowerName = name.toLowerCase();
        for (int i = 0; i < lowerName.length(); i++) {
            String nameChar = name.substring(i, i + 1);
            String lowerChar = lowerName.substring(i, i + 1);
            if (!nameChar.equals(lowerChar)) {
                sb.append("_").append(lowerChar);
            } else {
                sb.append(nameChar);
            }
        }

        return sb.toString();
    } 

    public static void main(String[] args) {
        System.out.println(CamelAndLowerUpperTrans.camelToUnderscore("soundMinAvg"));
    }
}

2. bean转map

将bean的中所有属性转为map,包括继承自父类的属性

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


public class BeanUtils {
    
    private BeanUtils() {
    }

    /**
     * 将bean转为Map
     *
     * @param object
     * @return
     */
    public static Map<String, Object> beanToMap(Object object) {
        Map<String, Object> result = new HashMap<>();

        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                String fieldName = propertyDescriptor.getName();
                if ("class".equals(fieldName)) {
                    continue;
                }

                Method readMethod = propertyDescriptor.getReadMethod();
                Object value = readMethod.invoke(object);

                result.put(fieldName, value);
            }


            return result;
        } catch (Exception e) {
            throw new RuntimeException("读取bean属性失败", e);
        }
    }
}

JavaBean与Map互转 一、摘要 在实际开发过程中,经常碰到需要进行对象与map之间互转的问题,其实对于对象、Map 之间进行互转有很多种方式,下面我们一起来梳理一下: 利用 JSON 工具包,将对象转成字符串,之后再转成 Map,这种需要转换2次,相对来说效率比较底; 利用 Java 反射,获取 Bean 类的属性和值,再转换到 Map 对应的键值对中,相对来说这种方法效率高些,在实现上比较麻烦; 利用 Java 的内省(Introspector) 实现,获取 Bean 类的属性和值,Map与对象互转,效率比较高; . 阅读详情

相关推荐

阿粉带你彻底解决开发中对象Bean与Map互转问题!

一、摘要 在实际开发过程中,经常碰到需要进行对象与map之间互转的问题,其实对于对象、Map 之间进行互转有很多种方式,下面我们一起来梳理一下:利用 JSON 工具包,将对象转成字符串,...

Java极客技术 3758

常用的map转bean互转方法

还得是成熟的工具类啊,手写吧,还没别人的还用

qq_37700773的博客 1万+

Java Bean与Map互转技术解析

在现代Java应用程序中,数据交换和处理是不可或缺的部分。Java Bean与Map作为两种常见的数据结构,在不同场景下发挥着各自的优势。Java Bean作为一种规范,其结构化和面向对象的特性使得它在业务逻辑层和持久化层中应用广泛。Map则以其灵活和快速的特点,在处理键值对数据时表现出色。然而,Java Bean与Map在结构和用途上存在差异,这就需要在不同场景下对它们进行相互转换,以满足业务需求。

weixin_35006125的博客 1418

Java 反射之实现 Map 转 Bean 操作

闲来无事突然想温习一下 java 的反射机制,于是就写了这篇通过反射实现集合转对象的底层操作。先说说学习反射机制都有哪些好处,首先大部分的框架源码多多少少都使用到了 java 反射,所以掌握以后可以增强我们阅读源码的能力。其次呢在项目中我们也可以写一些简单的工具类方法,比如 JSON 转 Bean,Copy Bean 等操作,这样的好处是我们可以针对业务逻辑去进行特殊处理,改起来也更加的方便。当然,别人写好的工具类,功能齐全,使用方便简单,相对来说还是更香的,比如常用的阿里提供的工具类、HuTool 等

超超IT的博客 2390

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 871

Jlink除了调试还能干啥?用JFlash SPI给W25Q64烧录固件的5个实用技巧

本文深入探讨了Jlink的隐藏功能,特别是通过JFlash SPI高效烧录W25Q64的5个进阶技巧。从硬件连接优化到批量处理脚本,再到数据安全验证,这些技巧能显著提升烧录速度和稳定性,适用于量产环境。文章还提供了详细的参数配置和脚本示例,帮助工程师充分发挥Jlink的潜力。

weixin_29164843的博客 409

Java中Map与Bean互转

package com.czx.springbootshiro.util; import org.apache.commons.beanutils.BeanUtils; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import ...

子游丶 2917

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

Java的xml与map,与Bean互转

xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j...

weixin_30247159的博客 338

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3239

R语言 百度坐标转换至WGS84坐标

本文利用R语言封装了百度坐标转换至WGS84坐标的函数,亲测有效,提供了便捷的百度坐标转换方法。

qingchen98的博客 2135

Java中Map与bean互转

使用Jackson库进行Map与Bean的相互转化

fxtxz2的专栏 4173

使用Verilog实现QR分解——嵌入式 [设计与代码]

通过Verilog的硬件描述语言,我们可以将QR分解算法实现为硬件电路,并在嵌入式系统中高效地运行。本文将介绍如何使用Verilog设计并实现QR分解算法,该算法用于将一个矩阵分解为正交矩阵Q和上三角矩阵R。具体而言,QR分解通过对矩阵的列进行正交化处理,得到正交矩阵Q,并将对应的正交化结果存储在上三角矩阵R中。该算法通过将矩阵分解为两个部分,正交矩阵Q和上三角矩阵R,实现了对矩阵的分解和变换。模块,该模块接收待分解矩阵A,并输出正交矩阵Q和上三角矩阵R。下面给出了使用Verilog实现QR分解的源代码。

CodeMaven的博客 620

通过java反射实现map与bean之间互转

最近写接口规范时,规定用Map类型传递参数,因此写了一个Map和Bean互转的工具类。 主要技术利用java的反射。 import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; import java.util.lo...

星光似霰 373

【C# + HALCON 机器视觉】HALCON经典算子:光流法运动分析(optical_flow_mg)

摘要:本文面向智能监控人流统计需求,研究C#与HALCON集成开发中optical_flow_mg算子的应用。通过RTSP获取视频流,利用光流法计算运动矢量,结合形态学操作与区域筛选实现行人区域分割,最终完成人流量统计与热力图可视化。详细阐述ROI局部处理等性能优化策略、try-catch异常捕获机制及跨平台集成方案。实验表明,该系统检测准确率达93.6%,单帧处理时间42ms,为公共场所人流量统计提供了完整可行的技术方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1441

【Mini KITTI】KITTI数据集简介 — Mini KITTI

为了快速进行算法调试、训练、评估和验证,以及快速下载,制作了一个mini kitti数据集,数据集的文件目录结构与完整KITTI数据集保持一致。其中,小型的KITTI数据集,即 mini kitti保存了20个训练样本和5个测试样本。下载地址为:。 关于KITTI各个部分的介绍请分别参考以下内容: ...

叶子的博客 7534

Java Bean和Map进行互转的方式有如下几种:

beanToMapMapToBean....等方法。

Java后端技术栈 4563

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java Bean、Json、Map和List互转方式汇总

各种json转换操作

指尖凉的博客 1755

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java bean to map_javaBean与Map互转的工具类

import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.commons.b...

weixin_35865261的博客 478

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java map转bean_Map与javaBean的互转

1.map转javaBean/*** map转换成javaBean* @param map* @return*/public static Object transMap2Bean(Map map,Object obj){try{//1.获取bean信息BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());PropertyDesc...

weixin_42674361的博客 908

java中的bean、list、map和JSON的互转

JSON两种格式:1、对象格式,2、数组对象 在前端和后端进行数据传输的时候,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。 //JSON的对象格式的字符串 {"name":"JSON","address":"北京市西城区","age":25} //数据对象格式 [{"name":"JSON","ad...

小石头 582

java Map与bean互转

java中Map与bean的互转,多种方法

gao123ming的专栏 300

java bean 转bean_JsonObject与javabean互转,Map与javabean互转

/*** 将Json对象转换成Map** @param jsonObject* json对象* @return Map对象* @throws JSONException*/public static Map toMap(String jsonString) throws JSONException {JSONObject jsonObject = new JSONObject...

weixin_33270920的博客 121

java的bean和map互转的工具类

import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java....

weixin_33919950的博客 212
上一篇: scrapy模拟点击
下一篇: linux静态ip设置
pp_lan
博客等级 码龄10年 419粉丝 130原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值