JavaBeanUtils javaBean转map, 实体类转map,实体集合转List<Map>

复制代码
package com.application.util;

import com.alibaba.fastjson.JSON;
import org.springframework.util.ObjectUtils;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JavaBeanUtils {

    /**
     * 实体类 转 Map
     * @param bean 要转化的JavaBean 对象
     * @param flagNull true 去除Bean字段空值,  false Bean空字段,同样生成Map
     * @return 转化出来的  Map 对象
     * @throws IntrospectionException   如果分析类属性失败
     * @throws IllegalAccessError   如果实例化 JavaBean 失败
     * @throws InvocationTargetException 如果调用属性的 setter 方法失败
     */
    public static Map<String, Object> convertBeanToMap(Object bean, boolean flagNull) throws IntrospectionException, IllegalAccessException, InvocationTargetException {
        Class type = bean.getClass();
        Map<String, Object> returnMap = new HashMap<>();
        BeanInfo beanInfo = Introspector.getBeanInfo(type);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

        for (int i = 0; i < propertyDescriptors.length; i++) {
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            if (!"class".equals(propertyName)) {
                Method readMethod = descriptor.getReadMethod();
                Object result = readMethod.invoke(bean, new Object[0]);
                if (flagNull) {
                    if (!ObjectUtils.isEmpty(result)) {
                        returnMap.put(propertyName, result);
                    }
                } else {
                    if (ObjectUtils.isEmpty(result)) {
                        returnMap.put(propertyName, "");
                    } else {
                        returnMap.put(propertyName, result);
                    }
                }
            }
        }
        return  returnMap;
    }

    /**
     * 实体类 转 Map
     * @param obj
     * @return
     */
    public static Map<String, Object> beanToMap(Object obj) {
        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(obj), Map.class);
        return params;
    }

    /**
     * Map转实体类
     *
     * @return
     */
    public static <T> T mapToBean(Map<String, Object> params, Class<T> clazz) {
        T obj = JSON.parseObject(JSON.toJSONString(params), clazz);
        return obj;
    }
复制代码
/**
 * list<Bean>转List<Map>
 * @return
 */
public static <T>  List<Map<String,Object>>beanListToMapList(List<T> beanList) {
    List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
    for (T bean : beanList) {
    Map<String,Object>  map = beanToMap(bean);
        resultList.add(map);
    }
    return resultList;
}
复制代码
}
相关推荐
IvanCodes5 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
M78佐菲6 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
Patrick在香港6 小时前
Claude 工具调用返回空:8 次失败里只有 1 次状态码不对,其余全带 200
爬虫·python·api·claude·香港
Web3&Basketball7 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
益达丫7 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
AIFQuant8 小时前
ETF行情API接入踩坑记:从报错到跑通的七个问题
python·金融·区块链·etf·基金
GPU实战笔记9 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
chicheese9 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
狗狗狗狗狗乐啊9 小时前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
Linux-lucky10 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu