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;
}
相关推荐
oak隔壁找我7 分钟前
Java 高级特性
java·后端
骈拇11 分钟前
重写、重载、访问者模式
java
老K的Java兵器库29 分钟前
对象创建源码追踪:从 new 指令到 JVM 内部实现
java·jvm
小学鸡!30 分钟前
spring boot实现接口数据脱敏,整合jackson实现敏感信息隐藏脱敏
java·spring boot
豆沙沙包?1 小时前
2025年--Lc187--120. 三角形最小路径和(多维动态规划,矩阵)--Java版
java·矩阵·动态规划
左灯右行的爱情1 小时前
ImportCandidates 类详细解析
java·spring boot
老K的Java兵器库1 小时前
Metaspace OOM 排查实录:一次 Spring 热部署爆掉 256 M 元空间
java·jvm·spring
啦啦9117142 小时前
提供一些准备Java八股文面试的建议
java·开发语言·面试
考虑考虑2 小时前
JDK25中的StableValue
java·后端·java ee
杯莫停丶2 小时前
设计模式之:简单工厂模式
java·设计模式·简单工厂模式