• Java中实体与Map的相互转换


    一、在Java中,可以通过以下方法将实体类转换为Map:

    1. 利用Java反射机制:
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = obj.getClass();
        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object value = field.get(obj);
            map.put(fieldName, value);
        }
        return map;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 利用Java 8 Stream API:
    public static Map<String, Object> objectToMap(Object obj) {
        return Arrays.stream(obj.getClass().getDeclaredFields())
                .peek(field -> field.setAccessible(true))
                .collect(Collectors.toMap(Field::getName, field -> {
                    try {
                        return field.get(obj);
                    } catch (IllegalAccessException e) {
                        return null;
                    }
                }));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    以上两种方法都可以将实体类转换为Map。需要注意的是,这些方法仅会将实体类中的属性转换为Map中的键值对,不会包含方法、构造器、父类属性等其他部分。

    二、要将map转换为实体类对象,可以使用以下方法:

    1. 使用Java反射机制:
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapToEntity {
        public static void main(String[] args) throws IllegalAccessException {
            Map<String, Object> map = new HashMap<>();
            map.put("name", "张三");
            map.put("age", 25);
    
            User user = mapToEntity(map, User.class);
            System.out.println(user);
        }
    
        public static <T> T mapToEntity(Map<String, Object> map, Class<T> clazz) {
            T obj = null;
            try {
                obj = clazz.newInstance();
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    String key = entry.getKey();
                    Object value = entry.getValue();
                    Field field = clazz.getDeclaredField(key);
                    field.setAccessible(true);
                    field.set(obj, value);
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchFieldException e) {
                e.printStackTrace();
            }
            return obj;
        }
    }
    
    class User {
        private String name;
        private int age;
    
        // 省略getter和setter方法
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    1. 使用第三方库:例如Jackson、Gson等。这里以Jackson为例:
      首先,添加Jackson依赖到项目中(以Maven为例):
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后,创建实体类User:

    public class User {
        private String name;
        private int age;
    
        // 省略getter和setter方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接下来,使用Jackson将map转换为User对象:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import java.util.HashMap;
    import java.util.Map;
    
    public class MapToEntity {
        public static void main(String[] args) throws Exception {
            Map<String, Object> map = new HashMap<>();
            map.put("name", "张三");
            map.put("age", 25);
    
            ObjectMapper objectMapper = new ObjectMapper();
            User user = objectMapper.convertValue(map, User.class);
            System.out.println(user);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    model字体图标
    Go字符串拼接6种方式及其性能测试:strings.builder最快
    CMS详解
    MySQL进阶——存储引擎
    高通导航器软件开发包使用指南(17)
    《持续交付:发布可靠软件的系统方法》- 读书笔记(二)
    网络编程 —— Http使用httpClient实现页面爬虫
    激光焊如何更准更稳?维视智造激光焊视觉解决方案助力精密制造
    A Comprehensive Survey on Graph Neural Networks
    python开发之个微机器人的二次开发
  • 原文地址:https://blog.csdn.net/qq_43868413/article/details/134544896