Map与JavaBean相互转换的工具类 

 更新时间:2022年02月18日 16:52:28   作者:梁云亮  
这篇文章主要介绍了Map与JavaBean相互转换的工具类,在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值,需要的朋友可以参考下

下面就来分享工具类的内容:

使用范围:JavaBean类对象的属性不能是数组、ListSetMap

public class MapBeanUtil {

    /**
     * JavaBean转Map
     * @param obj
     * @return
     */
    public static Map<String, Object> bean2Map(Object obj) {
        Map<String, Object> map = new LinkedHashMap<>();
        Class<?> clazz = obj.getClass();

        for (Field field : clazz.getDeclaredFields()) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object value = null;
            try {
                value = field.get(obj);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            if (value == null){
                value = "";
            }
            map.put(fieldName, value);
        }
        return map;
    }

    /**
     * Map转JavaBean
     * @param clazz
     * @param map
     * @param <T>
     * @return
     */
    public static <T> T map2Bean(final Class<T> clazz, final Map<String, ? extends Object> map) {
        if (map == null) {
            return null;
        }
        T res = null;
        try {
            res = clazz.getDeclaredConstructor().newInstance();
            //获取到所有属性,不包括继承的属性
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                //获取字段的修饰符
                int mod = field.getModifiers();
                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                    continue;
                }
                //设置对象的访问权限
                field.setAccessible(true);
                //根据属性名称去map获取value
                if(map.containsKey(field.getName())) {
                    //给对象赋值
                    field.set(res, map.get(field.getName()));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public static void main(String[] args) throws Exception {
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", 1001);
        map.put("username", "zhangsan");
        map.put("password", "123456");
        map.put("nickname", "张三");
        map.put("email", "369950806@qq.com");
        map.put("gender", true);
        map.put("birth", LocalDate.now());
        map.put("avatar", "/aa/bb/ab.jpg");
        map.put("role", "VIP");
        map.put("status", (byte) 1);
        map.put("salt", "ldfkasjghweoiq324");
        map.put("createTime", LocalDateTime.now());
        map.put("updateTime", LocalDateTime.now());

        User user = map2Bean(User.class, map);
        System.out.println(user);

        Map<String, Object> res = bean2Map(user);
        System.out.println(map);
    }
}

User类的代码:

public class User {
    private Integer id;
    private String username;
    private String password;
    private String nickname;
    private String email;
    private Boolean gender;
    private LocalDate birth;
    private String avatar;
    private String role;
    private Byte status;
    private String salt;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

到此这篇关于Map与JavaBean相互转换的工具类 的文章就介绍到这了,更多相关Map与JavaBean相互转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速理解Java设计模式中的组合模式

    快速理解Java设计模式中的组合模式

    这篇文章主要介绍了快速理解Java设计模式中的组合模式,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • spring打包到jar包的问题解决

    spring打包到jar包的问题解决

    这篇文章主要给大家介绍了关于spring打包到jar包遇到的问题的解决方法,文中通过实例代码结束的非常详细,对大家的学习或者使用spring打包具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • java.lang.Instrument 代理Agent使用详细介绍

    java.lang.Instrument 代理Agent使用详细介绍

    这篇文章主要介绍了java.lang.Instrument 代理Agent使用详细介绍的相关资料,附有实例代码,帮助大家学习参考,需要的朋友可以参考下
    2016-11-11
  • Java中IOException异常解决方法

    Java中IOException异常解决方法

    这篇文章主要给大家介绍了关于Java中IOException异常解决的相关资料,IOException是Java中的一个受检查异常(Checked Exception),它是java.io包中定义的异常类之一,需要的朋友可以参考下
    2023-07-07
  • Java中SimpleDateFormat日期格式转换详解及代码示例

    Java中SimpleDateFormat日期格式转换详解及代码示例

    这篇文章主要介绍了Java中SimpleDateFormat日期格式转换详解及代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java long 转成 String的实现

    Java long 转成 String的实现

    这篇文章主要介绍了Java long 转成 String的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 浅谈Java中的桥接方法与泛型的逆变和协变

    浅谈Java中的桥接方法与泛型的逆变和协变

    对应于Java当中,协变对应的就是<? extends XXX>,而逆变对应的就是<? super XXX>,本文详细的介绍了Java中的桥接方法与泛型的逆变和协变,感兴趣的可以了解一下
    2022-04-04
  • 解决Spring boot 整合Junit遇到的坑

    解决Spring boot 整合Junit遇到的坑

    这篇文章主要介绍了解决Spring boot 整合Junit遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • JavaWeb Servlet技术及其应用实践

    JavaWeb Servlet技术及其应用实践

    这篇文章主要介绍了JavaWeb Servlet技术,Servlet指在服务器端执行的一段Java代码,可以接收用户的请求和返回给用户响应结果,感兴趣想要详细了解可以参考下文
    2023-05-05
  • Java @Pointcut注解表达式案例详解

    Java @Pointcut注解表达式案例详解

    这篇文章主要介绍了Java @Pointcut注解表达式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09

最新评论