java基础—-利用注解和反射把map封装成bean

java基础—-利用注解和反射把map封装成bean

利用注解可以解决属性名和map键值不匹配的问题

public class mapToBean {
   
    public static void main(String[] args) {
   
        Map<String,Object> map=new HashMap<>();
        map.put("empno",35232);
        map.put("ename","张三");
        map.put("job","工作");
        Employee employee = mapToBean(map, Employee.class);
        System.out.println(employee);


    }
    public static <T> T mapToBean(Map<String,Object> map,Class<T> cls){
   

        T t=null;
        try {
   
            //创建实例
             t = cls.newInstance();
            //获取类上的所有字段
            Field[] fields = cls.getDeclaredFields();
            if(fields !=null && fields.length>0){
   
                //遍历字段数组
                for (Field field : fields) {
   
                    if(field.isAnnotationPresent(Column.class)){
   
                        Column annotation = field.getAnnotation(Column.class);
                        if(annotation !=null){
   
                            //获取值
                            String key = annotation.value();
                            //将注解中的值作为map的键查找map中的值
                            Object value = map.get(key);
                            if(value !=null){
   
                                //说明map中包含这个注解作为键的值,那么我们就映射到bean中
                                String fieldName = field.getName();
                                //通过内省映射
                                PropertyDescriptor pd=new PropertyDescriptor(fieldName,cls);
                                Method writeMethod = pd.getWriteMethod();
                                writeMethod.invoke(t,value);
                            }
                        }
                    }else {
   
                        //如果不存在注解,那就用字段名去map中取值
                        String name = field.getName();
                        Object value = map.get(name);
                        if(value !=null){
   
                            //说明map中包含这个注解作为键的值,那么我们就映射到bean中
                            String fieldName = field.getName();
                            //通过内省映射
                            PropertyDescriptor pd=new PropertyDescriptor(fieldName,cls);
                            Method writeMethod = pd.getWriteMethod();
                            writeMethod.invoke(t,value);
                        }
                    }
                }


            }




        } catch (Exception e) {
   
            e.printStackTrace();
        }


        return t;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2354.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数学建模五个步骤_思考问题的五步方法

    数学建模五个步骤_思考问题的五步方法五步方法五步方法顾名思义,通过五个步骤完成用数学模型解决实际问题。它包含以下五个步骤:提出问题 选择建模方法 推导模型的数学表达式 求解模型 回答问题第一步是提出问题,即对遇到的实际问题使用恰当的数学语言进行表达。一般而言,首要任务是对术语进行定义。无论是实际问题涉及到的变量,还是这些变量的单位、相关假设,都应当用等式或者不等式进行表达。在这一基础上,我们就可以用数学语言对实际问…

    2022年9月23日
    3
  • NodeJS环境下使用axios上传文件

    NodeJS环境下使用axios上传文件最近有个需求,需要在nodejs后端上传图片到云存储服务器,刚好对axios这个库比较熟悉,因此便开始在网上查资料,但是网上大多的都是用axios在前端上传文件的代码,即是基于浏览器环境的。后来找到了基于Nodejs环境的axios上传代码,一番copy后便开始了测试,本以为会一帆风顺,没想到服务器那边却总是返回如下错误,也就是说我们的请求并没有以multipart/form-data的形式封装好…

    2022年6月16日
    109
  • IOS开发之——Position和AnchorPoint(92)「建议收藏」

    IOS开发之——Position和AnchorPoint(92)「建议收藏」一概述CAlayer中position和anchorPoint属性说明position和anchorPoint示意图二position和anchorPoint属性说明CALayer中有2个非常重要的属性:position和anchorPoint@propertyCGPointposition用来设置CALayer在父层中的位置以父层的左上角为原点(0,0)@propertyCGPointanchorPoint称为“定位点”,“锚点”决定着CALayer身上的哪个点

    2022年10月8日
    5
  • linux卸载已安装软件的命令_软件卸载不了

    linux卸载已安装软件的命令_软件卸载不了1、删除软件方法一、如果你知道要删除软件的具体名称,可以使用12方法二、如果不知道要删除软件的具体名称,可以使用1sudoapt-getpurge一个带core的package,如果

    2022年8月2日
    9
  • 静态网页设计作品_web静态网页模板

    静态网页设计作品_web静态网页模板作品汇报新的一年新的成就,经历了一星期的思考,新的作品终于完成啦,14张页面经历了多次的修改和揣摩,希望大家能够喜欢。作品主题是“春节”页面框架页面应用了导航栏下拉的形式,使导航栏更加简洁,让浏览者留下空间感,导航栏下拉形式能够让浏览者清晰的浏览页面,页面以红色为底色,更能突出春节这一主题,能够突出春节的喜庆首页首页运用表单和超链接,能够突出该页面的作用,表单运用border-radius属性,使页面更美观春节简介和起源禁烟令的实施和疫情的爆发,让中国春节减少了许多的年味,大部分人都快遗

    2025年8月31日
    8
  • dpkg详解_historian授权

    dpkg详解_historian授权1.dpkg描述    dpkg是一个安装、创建、移除和管理debian包的工具。更多使用界面友好的dpkg的前端”dselect”,。dpkg完全受控于命令行参数,和零个或更多参数正确的组成一个操作方式。参数告诉dpkg要做什么和多种选项控制不同的行为。dpkg不仅提供了大量的参数选项,同时也提供了许多子命令比如:dpkg-debdpkg-divertdpkg-query

    2022年10月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号