Java BeanとMapを相互に変換するにはどうすればよいですか? (コード)

不言
リリース: 2018-10-08 15:09:09
転載
1777 人が閲覧しました

この記事の内容は、Java Bean と Map を相互に変換する方法についてです。 (コード)、それは特定の参考値を必要としている友人がそれを参照できることを願っています。

概要

Apache の BeanUtils Bean ツール クラスは非常に強力で、基本的に Bean 操作のすべてのメソッドをカバーします。ここでは 2 つの側面について説明します。1 つは Bean から Map への変換、もう 1 つは Map から Bean への変換です。Bean から Map へは実際に Java の動的リフレクション テクノロジが使用されており、Bean の種類に関係なく、動的に変換できます。これは Map オブジェクトになりますが、前提条件として、フィールドがキャメル ケースの名前付けに準拠している必要があり、これもコーディング仕様です。各フィールドには getter メソッドと setter メソッドが必要です。 Map to Bean もリフレクションを通じて Bean に動的に解析されます。 Java のリフレクションは実際に非常に重要であり、私たちが使用する多くのツール クラスに存在します。それを使用できる必要があるだけでなく、それを自分で手書きで実装できることが最も重要です。

Apache BeanUtils を使用して Bean を Map に変換

#コードの実装

/**
     * 用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());
    }
ログイン後にコピー

テスト結果

Apache BeanUtilsを使用してMapをBeanに変換する

コードの実装

/**
     * 用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());
    }
ログイン後にコピー

テスト結果

##Bean を Map に変換し、Bean を書き込む BeanUtils の実装を理解するマップへ

#コード実装

/**
     * 应用反射(其实工具类底层一样用的反射技术)
     * 手动写一个 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());
    }
ログイン後にコピー

テスト結果

以上がJava BeanとMapを相互に変換するにはどうすればよいですか? (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート