map和bean转换

开发中有一步要发送 http 请求,参数为 map ,原本是有一个 bean 的, 于是就需要转换一下,

package com.test;

spring springframework 里有 BeanUtils,包含一个广为人知的 copyProperties 方法,于是点开这个类看了并没有转为map的,

import java.util.HashMap;

虽然写一个转换方法也不算困难,不过由于时间关系,如果有现成的就直接导包用嘛,

import java.util.Map;

然后搜索了一下,发现 org.apache.commons.beanutils.BeanUtils 有一个 populate(bean, map),的方法,就拿过来用了,

import java.util.Map.Entry;

后来测试时候发现map是空的,就很懵逼,然后看了一下方法描述

import org.apache.commons.beanutils.BeanUtils;

@param properties Map keyed by property name, with the corresponding (String or String[]) value(s) to be set

import org.slf4j.Logger;

威尼斯人棋牌,就是说先要把 bean 的属性设为 map 的 key 才行,有 key 才会有值,而 new 的 map 当然是空的,结果还是空的。(⊙﹏⊙) 想不通开发者这么做的用意。

import org.slf4j.LoggerFactory;

无奈正打算重写之际,发现它的第一个方法(因为是d开头)describe 参数为 bean ,return map,跑了一下测试打印出来是这样子的

import com.pojo.User;

{ CSNF=null, CDBH=ererger, class=class com.dto.PeopleData}

public class TestMapBeanConvert {

多一个 class 属性,然后 map.remove("class") ,就得到了想要的结果

    private static Logger LOGGER = LoggerFactory.getLogger(TestMapBeanConvert.class);

{ CSNF=null, CDBH=ererger}

    // 将map转为bean

下面是得空补上的手动实现方法

    public staticT mapToBean(Map<String, Object> map, Class clz) {

             PeopleData people = new PeopleData();
        Map<String, String> params = new HashMap<String, String>();
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(people.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();

                // 过滤class属性
                if (!key.equals("class")) {
                    // 得到property对应的getter方法
                    Method m = property.getReadMethod();
                    String value = (String) m.invoke(people);

                    params.put(key, value);
                }

            }

        } catch (Exception e) {
            // TODO: handle exception
        }

        T bean = null;

        try {

              bean = clz.newInstance();

            // 遍历map中的key,若bean中有这个属性(key),将key对应的value赋值给bean对应的属性

            BeanUtils.populate(bean, map); // 将map转为bean

        } catch (Exception e) {

            LOGGER.info("ERROR ------> " e.getMessage());

        }

        return bean;

    }

    // 将bean转为map

本文由威尼斯人棋牌发布于计算机教程,转载请注明出处:map和bean转换