Object & Map 的相互转换

学生业务对象定义:Student

java 复制代码
Student student = new Student();
student.setId(1L);
student.setName("令狐冲")
student.setAge(10)

第一种:通过Alibaba Fastjson实现

pom.xml 文件依赖

java 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.66</version>
</dependency>

代码实现

java 复制代码
//Object转Map
Map map = JSONObject.parseObject(JSONObject.toJSONString(student), Map.class);
Map<String,Object> map = JSONObject.parseObject(JSON.toJSONString(student));
//Map转Object
Student s1 = JSON.parseObject(JSON.toJSONString(map), Student.class);
Student s2 = JSONObject.toJavaObject(JSON.toJSONString(map), Student.class);

第二种:通过SpringBoot自带 Jackso实现

一般情况下我们引入MVC,MVC里面帮我们引入了Jackso依赖

导入依赖

XML 复制代码
 <!-- springboot web(MVC)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

最终的依赖:

代码实现

java 复制代码
ObjectMapper mapper = new ObjectMapper();
//对象转map
Map m = mapper.readValue(mapper.writeValueAsString(student), Map.class);
//map转对象
Student s = mapper.readValue(mapper.writeValueAsString(m), Student.class);

第三种:通过Apache common Bean工具类实现

pom.xml文件依赖

XML 复制代码
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version>
</dependency>

代码实现

java 复制代码
#使用org.apache.commons.beanutils.BeanMap进行转换,实现Bean转Map
Map<String, Object> map = new org.apache.commons.beanutils.BeanMap(student);
 
#使用org.apache.commons.beanutils.BeanUtils将map转为对象
BeanUtils.populate(student, map);

第四种: 通过反射实现

通过反射实现Bean 转Map

java 复制代码
//Object转Map
public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException {
    Map<String, Object> map = new LinkedHashMap<String, Object>();
    Class<?> clazz = obj.getClass();
    System.out.println(clazz);
    for (Field field : clazz.getDeclaredFields()) {
        field.setAccessible(true);
        String fieldName = field.getName();
        Object value = field.get(obj);
        if (value == null){
            value = "";
        }
        map.put(fieldName, value);
    }
    return map;
}

通过反射实现Map转Bean

java 复制代码
//Map转Object
public static Object mapToObject(Map<Object, Object> map, Class<?> beanClass) throws Exception {
    if (map == null)
        return null;
    Object obj = beanClass.newInstance();
    Field[] fields = obj.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(obj, map.get(field.getName()));
        }
    }
    return obj;
}
相关推荐
未若君雅裁6 分钟前
JVM面试篇总结
java·jvm·面试
kk哥889926 分钟前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳37 分钟前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan623437 分钟前
面向对象(下)-接口的理解
java·开发语言
程序员游老板41 分钟前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode43 分钟前
Springboot核心构建插件
java·spring boot·后端
遥不可及~~斌1 小时前
Java 面试题集 -- 001
java·开发语言
qq_448011161 小时前
python HTTP请求同时返回为JSON的异常处理
python·http·json
C182981825751 小时前
HttpURLConnection 与其他客户端关系
java
通往曙光的路上2 小时前
发邮件1、创建邮箱
java