吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2561|回复: 6
收起左侧

[Java 转载] Java 对象转化为Map

[复制链接]
浅先森の小猫 发表于 2020-12-15 22:49

方式一: 利用FastJson 把对象转化为Map

1.项目引入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
 <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.56</version>
</dependency>
2.使用FastJson的ParseObject 方法
//导包
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
/**
     * 
     * @MethodName: getUserInfoDataByUserId
     * @Description: 根据useId查询用户信息,封装成map  key:属性名,value:属性值
     * @Param userId 用户userId
     * @return
     */
    public Map<String, String> getUserInfoDataByUserId(String userId) {
        Map<String, String> userMap = new HashMap<String, String>();
        BSysUser bSysUser = new BSysUser();
        if (StringUtils.isNoneBlank(userId)) {
            bSysUser = bSysUserService.selectByKey(userId);
            if (null != bSysUser) {
                //userMap = new BeanMap(bSysUser);
                userMap = JSON.parseObject(JSON.toJSONString(bSysUser), new TypeReference<Map<String, String>>() {
                });
            }
        }
        return userMap;
    }
3.提供接口,供其他模块调用
/**
     * 
     * @MethodName: getAppDataBySceneId
     * @Description: 根据userid获取用户信息
     * @param userId 用户userId
     * @param type 用户对象的属性名,例如 userName,trueName,mobile,userSex,photo
     * @return
     */
    @ResponseBody
    @RequestMapping("/api/user/getUserSingleInfoByUserIdAndAttribute")
    public ResponseData getUserSingleInfoByUserIdAndAttribute(String userId, String type) {
        ResponseData data = operateFailed("获取数据失败");
        String message = "用户信息获取成功";
        if (StringUtils.isBlank(userId)) {
            data = operateFailed("userId 为空!");
            return data;
        }
        if (StringUtils.isBlank(type)) {
            data = operateFailed("type 属性名为空,例如userName,trueName,photo!");
            return data;
        }

        Map<String, String> userMap = getUserInfoDataByUserId(userId);
        String value = "";
        if (null != userMap && StringUtils.isNoneBlank(type)) {
            switch (type) {
            case "userName":
                value = userMap.get("userName");
                break;
            case "trueName":
                value = userMap.get("trueName");
                break;
            case "photo":
                value = userMap.get("photo");
                break;
            case "mobile":
                value = userMap.get("mobile");
                break;
            case "isDel":
                value = userMap.get("isDel");
                break;
            case "userSex":
                value = userMap.get("userSex");
            case "createTime":
                value = userMap.get("createTime");
                break;
            }
        }
        if (StringUtils.isNoneBlank(value)) {
            data = operateSucess(message, value);
        }
        return data;
    }

方式二: 利用反射进行转换

public class BeanMapUtilByReflect {

    /**
     * 对象转Map
     * @param object
     * @return
     * @throws IllegalAccessException
     */
    public static Map beanToMap(Object object) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<String, Object>();
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            map.put(field.getName(), field.get(object));
        }
        return map;
    }

    /**
     * map转对象
     * @param map
     * @param beanClass
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> T mapToBean(Map map, Class<T> beanClass) throws Exception {
        T object = beanClass.newInstance();
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            int mod = field.getModifiers();
            if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                continue;
            }
            field.setAccessible(true);
            if (map.containsKey(field.getName())) {
                field.set(object, map.get(field.getName()));
            }
        }
        return object;
    }
}

方式三: 利用工具类进行转换

/**
     * 
     * @MethodName: getUserInfoDataByUserId
     * @Description: 根据useId查询用户信息,封装成map  key:属性名,value:属性值
     * @param userId 用户userId
     * @return
     */
    public Map<String, String> getUserInfoDataByUserId(String userId) {
        Map<String, String> userMap = new HashMap<String, String>();
        BSysUser bSysUser = new BSysUser();
        if (StringUtils.isNoneBlank(userId)) {
            bSysUser = bSysUserService.selectByKey(userId);
            if (null != bSysUser) {
                //import org.apache.commons.beanutils.BeanMap;
                //userMap = new BeanMap(bSysUser);

                //import org.apache.commons.beanutils.BeanUtils;
                //userMap = BeanUtils.describe(user);

                //效果等同
                userMap = JSON.parseObject(JSON.toJSONString(bSysUser), new TypeReference<Map<String, String>>() {
                });
            }
        }
        return userMap;
    }

        //import org.apache.commons.beanutils.BeanMap;
        //userMap = new BeanMap(bSysUser);
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

陌上烟雨 发表于 2021-4-6 23:09
感谢楼主分享,支持一下!
13729181580 发表于 2020-12-15 23:08
zouludaifeng 发表于 2021-1-29 14:15
如果对象中的参数比Map中的参数多或少,会发生什么?用工具类转换的时候
hualonghongyan 发表于 2021-1-29 17:02
可以用 第三方 hutools
angel_bai 发表于 2021-4-9 12:30
感謝分享!
不夏流年 发表于 2021-5-15 17:26
hutools 工具好评@#
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表