java属性拾取器

在前后端分离的开发过程中,经常遇到返回给前端的数据太多,只需要其中几个,一般是重新包装一个数据返给前端。

下面工具类就是解决对常用类型的属性的拾取或过滤的处理。


解决三类情况:

1,Bean -> Bean

2,Bean -> Map

3,List<Class> -> List<Map>


代码如下:


/**
 * 属性拾取器  
 * @Author:Leo
 * @Date:2017/9/5 9:32
 */
public class PropertyPicker {
    private final static Logger logger = LoggerFactory.getLogger(PropertyPicker.class);

    /**
     * 对象到对象
     *
     * @param <T>
     * @param <E>
     * @param targetClass
     * @param source
     * @return
     */
    public static <T, E> T pick(Class<T> targetClass, E source) {
        if (null == source) {
            return null;
        }
        T target = null;
        try {
            target = targetClass.newInstance();
        } catch (InstantiationException e) {
            logger.warn("创建目标类对象出错,InstantiationException:{}", e.getMessage());
        } catch (IllegalAccessException e) {
            logger.warn("创建目标类对象出错,IllegalAccessException:{}", e.getMessage());
        }
        Field[] targetFields = target.getClass().getDeclaredFields();
        Field s;
        for (Field t : targetFields) {
            try {
                s = source.getClass().getDeclaredField(t.getName());
                t.setAccessible(true);
                s.setAccessible(true);
                t.set(target, s.get(source));
            } catch (IllegalAccessException e) {
                logger.warn("属性拾取器出错,IllegalAccessException:{}", e.getMessage());
            } catch (NoSuchFieldException e) {
                logger.warn("属性拾取器出错,NoSuchFieldException:{}", e.getMessage());
            }
        }
        return target;
    }

    /**
     * 属性拾取到MAP
     *
     * @param source
     * @param properties
     * @param <T>
     * @return
     */
    public static <T> Map pick(T source, String[] properties) {
        if (null == source) {
            return null;
        }
        Map<String, Object> map = new HashMap();
        Field s;
        for (String property : properties) {
            try {
                s = source.getClass().getDeclaredField(property);
                s.setAccessible(true);
                map.put(property, s.get(source));
            } catch (IllegalAccessException e) {
                logger.warn("属性拾取器出错,IllegalAccessException:{}", e.getMessage());
            } catch (NoSuchFieldException e) {
                logger.warn("属性拾取器出错,NoSuchFieldException:{}", e.getMessage());
            }
        }
        return map;
    }

    /**
     * 属性拾取到Map,以List返回
     *
     * @param sources
     * @param properties
     * @param <T>
     * @return
     */
    public static <T> List pick(List<T> sources, String[] properties) {
        if (null == sources) {
            return null;
        }
        List<Map> list = new ArrayList<>();
        if (sources.size() == 0) {
            return list;
        }
        for (T obj : sources) {
            list.add(pick(obj, properties));
        }
        return list;
    }

    /**
     * 排除属性后拾取到MAP
     *
     * @param source
     * @param excludes
     * @param <T>
     * @return
     */
    public static <T> Map pickExclude(T source, String[] excludes) {
        if (null == source) {
            return null;
        }
        Map<String, Object> map = new HashMap();
        Field[] sourceFields = source.getClass().getDeclaredFields();
        for (Field field : sourceFields) {
            try {
                if (!ArrayUtils.contains(excludes, field.getName())) {
                    field.setAccessible(true);
                    map.put(field.getName(), field.get(source));
                }
            } catch (IllegalAccessException e) {
                logger.warn("属性拾取器出错,IllegalAccessException:{}", e.getMessage());
            }
        }
        return map;
    }

    /**
     * 排除属性后拾取到Map,以List返回
     *
     * @param sources
     * @param excludes
     * @param <T>
     * @return
     */
    public static <T> List pickExclude(List<T> sources, String[] excludes) {
        if (null == sources) {
            return null;
        }
        List<Map> list = new ArrayList<>();
        if (sources.size() == 0) {
            return list;
        }
        for (T obj : sources) {
            list.add(pickExclude(obj, excludes));
        }
        return list;
    }

}


很少写东西。

有问题,请提出,一起学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值