zoukankan      html  css  js  c++  java
  • 实体类如何"不费力气"的转为Map

      初衷:

        db返回了一个实体类,想封装成一个Map留着按需获取属性,所以就有了下面的Utils

        

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.*;
    
    /**
     * @program: ht
     * @description: 实体类存入Map
     * @author: Wangly
     * @create: 2020-12-29 13:29
     * @version: 1.0.0
     */
    public class BeanMap {
        /**
         * 获取obj中的所有方法
         * 
         * @param obj
         * @return
         */
        public List<Method> getAllMethods(Object obj) {
            List<Method> methods = new ArrayList<Method>();
         // 获取obj字节码 Class<?> clazz = obj.getClass(); while (!clazz.getName().equals("java.lang.Object"))
          {
           // 获取方法 methods.addAll(Arrays.asList(clazz.getDeclaredMethods())); clazz = clazz.getSuperclass(); } return methods; } /** * 将一个类用属性名为Key,值为Value的方式存入map * * @param obj * @return */ public Map<String, Object> convert2Map(Object obj) { Map<String, Object> map = new HashMap<String, Object>(); List<Method> methods = getAllMethods(obj); for (Method m : methods) { String methodName = m.getName(); if (methodName.startsWith("get")) { // 获取属性名 String propertyName = methodName.substring(3); try { map.put(propertyName, m.invoke(obj)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } return map; } }

      Test

      测试实体类

    import lombok.Data;
    
    /**
     * @program: ht
     * @description: TestBeanMap
     * @author: Wangly
     * @create: 2020-12-29 13:37
     * @version: 1.0.0
     */
    @Data
    public class Person {
        private int id;
        private String name;
        private String nipples;
        private String sw;
        private String bra;
        private String foot;
        private String mouth;
    
        public Person() {}
    
        public Person(int id, String name, String nipples, String sw, String bra, String foot, String mouth) {
            this.id = id;
            this.name = name;
            this.nipples = nipples;
            this.sw = sw;
            this.bra = bra;
            this.foot = foot;
            this.mouth = mouth;
        }
    }
    

      测试类

    @Test
        public void BeanMapTest() {
            BeanMap beanMap = new BeanMap();
            Person p = new Person();
            p.setId(1);
            p.setBra("pink");
            p.setMouth("good");
            p.setNipples("pink");
            p.setSw("black");
            p.setFoot("good");
    
            Map<String, Object> stringObjectMap = beanMap.convert2Map(p);
            stringObjectMap.forEach((k, v) -> {
                System.out.println("k:" + k + ",v:" + v);
            });
        }
    

      输出

      发现多少沾点多此一举   避免重复造轮子

    // 将 Map 转换为 实体类
    Person person = JSON.parseObject(JSON.toJSONString(personMap), person.class);
    System.out.println(user);
    // 将 实体类 转换为 Map
    Map map = JSON.parseObject(JSON.toJSONString(person), Map.class);
    System.out.println(map);

    新鲜刺激的东西永远都有,玩之前掂量掂量自己几斤几两
  • 相关阅读:
    SQL 查询优化
    win10鼠标右键菜单在左边,怎么改回右边
    Ansible 命令
    CSV模块
    Python 常用模块
    Ansible 常用模块
    Ansible 动态配置文件
    Cluster Health
    Elasticsearch Python API
    grok常用表达式
  • 原文地址:https://www.cnblogs.com/banxianer/p/14206262.html
Copyright © 2011-2022 走看看