java实体类转成map的实现

 更新时间:2022年06月21日 11:11:54   作者:南大白  
这篇文章主要介绍了java实体类转成map的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java实体类转成map

1.第一种

 <!-- 配置gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
       Map<String, Object> map = null;
  String jsonString = JSONUtil.toJsonStr(uploadBaseEntity);
       Gson gson = new Gson();
        map = new HashMap<>();
        map = gson.fromJson(jsonString, map.getClass());

2.第二种

/**
     * 对象转化为Map
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public static Map<String, String> objectToMap01(Object obj) throws Exception {
        if (obj == null) {
            return null;
        }
        Map<String, String> map = new HashMap<String, String>();
 
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            map.put(field.getName(), (String) field.get(obj));
        }
 
        return map;
    }

java实体类与map集合互转

废话不说,直接上代码!留着用吧...

package com.ddm.message.test;
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.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Java实体类与Map互转
 * @author Administrator
 *
 */
public class entityMapTransUtils {
    private static final Logger logger = LoggerFactory.getLogger(entityMapTransUtils.class);
    /**
     * Java实体类转Map:方法一
     * @param obj
     * @return
     */
    public static Map<String, Object> entityToMap1(Object obj){
        Map<String, Object> map = new HashMap<String, Object>();
        Class<?> clazz = obj.getClass();
        for(Field field : clazz.getDeclaredFields()){
            field.setAccessible(true);
            String fieldName = field.getName();
            Object object = null;
            try {
                object = field.get(obj);
            } catch (IllegalArgumentException | IllegalAccessException e) {
                logger.info(e.getMessage());
            }
            map.put(fieldName, object);
        }
        return map;
    }

    /**
     * Java实体类转Map:方法二
     * @param obj
     * @return
     */
    public static Map<String, Object> entityToMap2(Object obj){
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
                // 过滤class属性
                if (!key.equals("class")) {
                    // 得到property对应的getter方法
                    Method getter = property.getReadMethod();
                    Object value = getter.invoke(obj);
                    map.put(key, value);
                }
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
        return map;
    }
    
    /**
     * Map转实体类:要转换的Map的key跟实体类属性名相同的数据会转过去,不相同的字段会为null
     * @param clazz
     * @param map
     * @return
     */
    public static <T> T mapToEntity1(Class<T> clazz,Map<String, Object> map){
        T obj = null;
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
            obj = clazz.newInstance(); // 创建 JavaBean 对象
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            // 给 JavaBean 对象的属性赋值
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (map.containsKey(propertyName)) {
                    Object value = map.get(propertyName);
                    Object[] args = new Object[1];
                    args[0] = value;
                    try {
                        descriptor.getWriteMethod().invoke(obj, args);
                    } catch (InvocationTargetException e) {
                        logger.info(e.getMessage());
                    }
                }
            }
        } catch (IllegalAccessException e) {
            logger.info(e.getMessage());
        } catch (IntrospectionException e) {
            logger.info(e.getMessage());
        } catch (IllegalArgumentException e) {
            logger.info(e.getMessage());
        } catch (InstantiationException e) {
            logger.info(e.getMessage());
        }
        return (T)obj;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中的Consumer、Supply如何实现多参数?

    java中的Consumer、Supply如何实现多参数?

    Java的Consumer接口只能接受一个参数,但可以通过自定义接口、使用Tuple或嵌套结构来实现对多个参数的处理,对于Supplier接口,它不能接受参数,但可以通过自定义BiSupplier、结合Function或封装参数为对象来实现对两个参数并返回一个值的功能
    2024-11-11
  • springboot利用aop实现接口异步(进度条)的全过程

    springboot利用aop实现接口异步(进度条)的全过程

    我们在开发中,调用第三方接口时,往往是提交数据,要异步去获取数据,下面这篇文章主要给大家介绍了关于springboot利用aop实现接口异步(进度条)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • java构造函数的三种类型总结

    java构造函数的三种类型总结

    在本篇文章里小编给大家整理了一篇关于java构造函数的三种类型总结内容,有需要的朋友们可以学习参考下。
    2021-01-01
  • Spring Boot 接口加解密功能实现

    Spring Boot 接口加解密功能实现

    在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用;如果我们想保证数据传输的安全,对接口出参加密,入参解密,这篇文章主要介绍了Spring Boot 接口加解密功能实现,需要的朋友可以参考下
    2023-04-04
  • ArrayList在for循环中使用remove方法移除元素方法介绍

    ArrayList在for循环中使用remove方法移除元素方法介绍

    这篇文章主要介绍了ArrayList在for循环中使用remove方法移除元素的内容,介绍了具体代码实现,需要的朋友可以参考下。
    2017-09-09
  • Mybatis中通用Mapper的InsertList()用法

    Mybatis中通用Mapper的InsertList()用法

    文章介绍了通用Mapper中的insertList()方法在批量新增时的使用方式,包括自增ID和自定义ID的情况,对于自增ID,使用tk.mybatis.mapper.additional.insert.InsertListMapper包下的insertList()方法;对于自定义ID,需要重写insertList()方法
    2025-02-02
  • java实现String字符串处理各种类型转换

    java实现String字符串处理各种类型转换

    在日常的程序开发中,经常会涉及到不同类型之间的转换,本文主要介绍了String字符串处理各种类型转换,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java算法实现杨辉三角的讲解

    Java算法实现杨辉三角的讲解

    今天小编就为大家分享一篇关于Java算法实现杨辉三角的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java使用Instant时输出的时间比预期少了八个小时

    Java使用Instant时输出的时间比预期少了八个小时

    在Java中,LocalDateTime表示没有时区信息的日期和时间,而Instant表示基于UTC的时间点,本文主要介绍了Java使用Instant时输出的时间比预期少了八个小时的问题解决,感兴趣的可以了解一下
    2024-09-09
  • Java并发编程示例(八):处理线程的非受检异常

    Java并发编程示例(八):处理线程的非受检异常

    这篇文章主要介绍了Java并发编程示例(八):处理线程的非受检异常,Java为我们提供了一种机制,专门用于处理由Thread对象抛出的非受检异常,以避免程序的退出,需要的朋友可以参考下
    2014-12-12

最新评论