java属性拾取器
来源:互联网 发布:王尼玛 知乎 五五开 编辑:程序博客网 时间:2024/06/05 08:17
在前后端分离的开发过程中,经常遇到返回给前端的数据太多,只需要其中几个,一般是重新包装一个数据返给前端。
下面工具类就是解决对常用类型的属性的拾取或过滤的处理。
解决三类情况:
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
- java属性拾取器
- java字面量拾取
- web颜色拾取器。。。
- emoji表情拾取器
- WPF图标拾取器
- UIImagePickerController图像拾取器
- GPS拾取器(工具)
- 日期拾取器
- iPad图片拾取器
- iOS-UIPickerView拾取器
- 颜色拾取器
- 拾取
- 【Android】日期拾取器、时间拾取器与菜单
- 屏幕颜色拾取器 (VC++)
- JavaScript颜色拾取器 - colorjoe
- IOS之拾取器piker
- 5 高级控件-拾取器
- 坐标拾取器App上线
- Vector和LinkedList学习记录
- centos 更改yum 源
- C语言数据类型总结
- ContentProvider启动过程and多进程调用全过程源码详解
- 等价表达式
- java属性拾取器
- Codeforces Round #432 (Div.2)
- 使用反射、特性简化代码
- java基础学习总结——面向对象2
- vue项目创建基本使用参考
- java基础学习总结——多态(动态绑定)
- java基础学习总结——对象转型
- java中文件IO操作总结
- 条款5:类拷贝赋值操作符不能作用于-》常量成员变量和引用成员变量