当前位置:首页 > Java技术 > java常用工具类(一)—— Map 与 Bean 之间的互相转换

java常用工具类(一)—— Map 与 Bean 之间的互相转换

2022年08月05日 16:50:20Java技术2
import net.bytebuddy.implementation.bytecode.Throw;
import org.springframework.cglib.beans.BeanMap;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;


/**
 * @author Lius
 * @date 2018/10/26 13:37
 * @describe 实体工具类,
 */
public class BeanUtils extends org.springframework.beans.BeanUtils {
    public BeanUtils() {
    }

    /**
     * 实例化对象:传入类对类进行实例化对象
     *
     * @param clazz 类
     * @return 对象
     * @author Lius
     * @date 2018/10/26 13:49
     */
    public static <T> T newInstance(Class<?> clazz) {
        return (T) instantiateClass(clazz);
    }

    /**
     * 实例化对象,传入类名对该类进行实例化对象
     *
     * @param clazzStr 类名,传入是必须传入全路径,com...
     * @return 对象
     * @author Lius
     * @date 2018/10/26 13:54
     */
    public static <T> T newInstance(String clazzStr) {
        try {
            Class<?> clazz = Class.forName(clazzStr);
            return newInstance(clazz);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException();
        }
    }

    /**
     * 把对象封装成Map形式
     *
     * @param src 需要封装的实体对象
     * @author Lius
     * @date 2018/10/26 14:08
     */
    public static Map toMap(Object src) {
        return BeanMap.create(src);
    }

    /**
     * 把Map转换成bean对象
     *
     * @author Lius
     * @date 2018/10/26 14:09
     */
    public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) {
        // 对象实例化
        T bean = BeanUtils.newInstance(valueType);
        PropertyDescriptor[] propertyDescriptors = getPropertyDescriptors(valueType);
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            String properName = propertyDescriptor.getName();
            // 过滤class属性
            if ("class".equals(properName)) {
                continue;
            }
            if (beanMap.containsKey(properName)) {
                Method writeMethod = propertyDescriptor.getWriteMethod();
                if (null == writeMethod) {
                    continue;
                }
                Object value = beanMap.get(properName);
                if (!writeMethod.isAccessible()) {
                    writeMethod.setAccessible(true);
                }
                try {
                    writeMethod.invoke(bean, value);
                } catch (Throwable throwable) {
                    throw new RuntimeException("Could not set property '" + properName + " ' to bean" + throwable);
                }
            }
        }
        return bean;
    }

    public static void main(String[] args) {
        // Map To Bean
        Map<String, Object> map = new HashMap<String, Object>(16);
        map.put("loginName", "loginName");
        map.put("name", "name");
        map.put("password", "password");
        map.put("salt", "salt");
        map.put("phone", "phone");
        User user = toBean(map, User.class);
        System.out.println(user.getLoginName());

        // Bean To Map
        User user1 = new User();
        Map userMap = toMap(user1);
        System.out.println(userMap);
    }

}

作者:LiusBlog
来源链接:https://www.cnblogs.com/LiuSandy/p/9919659.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17912.html

分享给朋友:

“java常用工具类(一)—— Map 与 Bean 之间的互相转换” 的相关文章

Java 常用工具类(21) : 计算百分比,去整数/小数

import java.math.BigDecimal; import java.math.RoundingMode; import java.text.NumberFormat; /** * @Auther: liyue * @Date: 2018/8/31 15:31...

183 01 Android 零基础入门  03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下)

183 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下)

183 01 Android 零基础入门 03 Java常用工具类03 Java字符串 02 String类 03 String常用方法(下) 本文知识点: String常用方法(下) 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤...

Java的Collection工具类的常用方法

public static <T> void show(List<T> list){ for (T t : list) { System.out.print(t+" "); } }...

MD5工具类(java实现版)

MD5工具类(java实现版) 介绍 MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法, 因为其不可解密。其实现原理是基于Hash算法(简称散列函数)。...

java项目常用工具类之http请求工具类

jdk1.8+spring4.3.12 一、问题描述及试用场景: 在项目开发中,经常用调用http接口,下面是封装apache的httpclient工具类。 二、样例代码: package org.egg.utils; im...

Java IO工具类常用方法

常用的文件操作:包括文件拷贝、HTTP方式拷贝、文件下载等。  1.创建文件夹 /** * 创建文件夹 * @filePath:路径 */ public void MakeFolder(String folderPath){ File fi...

12款最常用的Java测试工具

Parasoft Jtest Jtest是Parasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性。 Abbot Abbot是一款测试Java GUIs的JUnit扩展程序...

java中常用的日期工具类

java中常用的日期工具类

java中常用的日期工具类 日期相关的类: package net.yto.ofclacct.core.util; import java.text.ParseException; import java.text.SimpleDateF...

Java常用工具类-发短信(集成云通信的企业信使短信平台)

1、网站后台地址 http://sms.58yhkj.com/ 2、java调用工具类 package com.chinautil.sendsms; import java.util.ArrayList; import java.util.Lis...

三、Java基础工具(1)_常用类——系统相关类

2018-05-12   系统相关类   查阅API 一、System类   表示系统的意思     1、arraycopy方法     public static void arraycopy(Obj...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。