Maison  >  Article  >  Java  >  Comment convertir Java Bean et Map entre eux ? (code)

Comment convertir Java Bean et Map entre eux ? (code)

不言
不言avant
2018-10-08 15:09:101696parcourir

Le contenu de cet article explique comment convertir Java Bean et Map entre eux ? (code), il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Vue d'ensemble

La classe d'outils BeanUtils Bean d'Apache est très puissante et couvre essentiellement toutes les méthodes d'opérations Bean. Ici, nous parlerons de deux aspects, l'un est Bean covert to Map, et l'autre est Map covert to Bean ; Bean to Map utilise en fait la technologie de réflexion dynamique de Java. Quel que soit le type de Bean, il peut être converti via dynamique. Il devient un objet Map, mais la condition préalable est que les champs doivent être conformes à la dénomination Camel Case, qui est également une spécification de codage. Une autre condition est que chaque champ nécessite des méthodes getter et setter. Map to Bean est également analysé dynamiquement dans Bean via Reflection. La réflexion de Java est en fait assez importante. Elle existe dans de nombreuses classes d'outils que nous utilisons. Nous devons non seulement être capables de l'utiliser, mais surtout être capables de comprendre pourquoi. Il est préférable de l'implémenter en écrivant soi-même. compréhension

Utilisez Apache BeanUtils pour convertir Bean en Map

Implémentation du code

/**
     * 用apache的BeanUtils实现Bean covert to Map
     * @throws Exception
     */
    public static void beanToMap() throws Exception {
        User user=new User();
        Map<String,String> keyValues=null;

        user.setPassWord("password");
        user.setComments("test method!");
        user.setUserName("wang shisheng");
        user.setCreateTime(new Date());

        keyValues=BeanUtils.describe(user);

        LOGGER.info("bean covert to map:{}", JSONObject.toJSON(keyValues).toString());
    }

Résultats des tests

Utilisez Apache BeanUtils pour convertir Map en Bean

Implémentation du code

/**
     * 用apache的BeanUtils实现Map covert to Bean
     * @throws Exception
     */
    public static void mapToBean() throws Exception {
        Map<String,String> keyValues=new HashMap<>();
        User user=new User();

        keyValues.put("sessionId","ED442323232ff3");
        keyValues.put("userName","wang shisheng");
        keyValues.put("passWord","xxxxx44333");
        keyValues.put("requestNums","34");

        BeanUtils.populate(user,keyValues);

        LOGGER.info("map covert to bean:{}", user.toString());
    }

Résultats des tests

Comprendre l'implémentation de BeanUtils convertissant Bean en Map et l'écriture Bean to Map

Mise en œuvre du code

/**
     * 应用反射(其实工具类底层一样用的反射技术)
     * 手动写一个 Bean covert to Map
     */
    public static void autoBeanToMap(){
        User user=new User();
        Map<String,Object> keyValues=new HashMap<>();
        user.setPassWord("password");
        user.setComments("test method!");
        user.setUserName("wang shisheng");
        user.setUserCode("2018998770");
        user.setCreateTime(new Date());
        Method[] methods=user.getClass().getMethods();
        try {
            for(Method method: methods){
                String methodName=method.getName();
                //反射获取属性与属性值的方法很多,以下是其一;也可以直接获得属性,不过获取的时候需要用过设置属性私有可见
                if (methodName.contains("get")){
                    //invoke 执行get方法获取属性值
                    Object value=method.invoke(user);
                    //根据setXXXX 通过以下算法取得属性名称
                    String key=methodName.substring(methodName.indexOf("get")+3);
                    Object temp=key.substring(0,1).toString().toLowerCase();
                    key=key.substring(1);
                    //最终得到属性名称
                    key=temp+key;
                    keyValues.put(key,value);
                }
            }
        }catch (Exception e){
            LOGGER.error("错误信息:",e);
        }
        LOGGER.info("auto bean covert to map:{}", JSONObject.toJSON(keyValues).toString());
    }

Résultats des tests

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer