首页 > 编程语言 >Java实体类对象与Map对象互转

Java实体类对象与Map对象互转

时间:2022-09-22 22:46:27浏览次数:45  
标签:Map 实体类 obj name map Person 互转 public

实体类对象转Map对象

使用Fastjson

public <T> Map<String, Object> toMapByJson(T obj) {
    // 默认序列化为数字类型的时间戳
    // String jsonStr = JSON.toJSONString(obj);

    // Fastjson内置了一个默认的日期格式yyyy-MM-dd HH:mm:ss,
    // 可以通过在调用JSON.toJSONString时传入SerializerFeature.WriteDateUseDateFormat来启用。
    // 通过修改默认的时间格式,结合启用默认日期格式,也可以达到按指定日期格式序列化的目的
    // JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
    String jsonStr = JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
    Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {
    });
    return map;
}

使用反射

public <T> Map<String, Object> toMapByReflect(T obj) {
      Field[] fields = obj.getClass().getDeclaredFields();
      Map<String, Object> map = new HashMap<>();

      try {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          for (Field f : fields) {
              f.setAccessible(true);
              Object val = f.get(obj);
              if (f.getType() == Date.class) {
                  map.put(f.getName(), sdf.format(val));
              } else {
                  map.put(f.getName(), val);
              }
          }
      } catch (IllegalArgumentException | IllegalAccessException e) {
          e.printStackTrace();
      }

      return map;
  }

Map对象转实体类对象

使用Fastjson

public <T> T toObjByJson(Map<String, Object> map, Class<T> type) {
    // 日期格式参照上文
    T t = JSON.parseObject(JSON.toJSONString(map), type);
    return t;
}

使用反射

public <T> T toObjByReflect(Map<String, Object> map, Class<T> type) {
    T obj = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        obj = type.newInstance();
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field f : fields) {
            int mod = f.getModifiers();
            if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                continue;
            }
            f.setAccessible(true);
            if (map.containsKey(f.getName())) {
                if (f.getType() == Date.class) {
                    f.set(obj, sdf.parse((String) map.get(f.getName())));
                } else {
                    f.set(obj, map.get(f.getName()));
                }
            }
        }

    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | ParseException e) {
        e.printStackTrace();
    }

    return obj;
}

测试

新建实体类

public class Person {
    private Integer id;
    private String name;
    private Date birthDay;

    public Person() {

    }

    public Person(Integer id, String name, Date birthDay) {
        this.id = id;
        this.name = name;
        this.birthDay = birthDay;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", birthDay=" + birthDay + "]";
    }
}

测试用例

Person p = new Person(1, "Jack", new Date());
TestCopy obj = new TestCopy();
Map<String, Object> map = obj.toMapByJson(p);
System.out.println(map);

Map<String, Object> map2 = obj.toMapByReflect(p);
System.out.println(map2);

Person p1 = obj.toObjByReflect(map, Person.class);
System.out.println(p1);

Person p2 = obj.toObjByReflect(map2, Person.class);
System.out.println(p2);


输出结果

标签:Map,实体类,obj,name,map,Person,互转,public
From: https://www.cnblogs.com/saltish/p/16694397.html

相关文章

  • Java Map倒序排列
    publicstaticvoidmain(String[]args){Map<String,List<String>>map=newLinkedHashMap<>();//倒序遍历ListIterator<Map.Entry<......
  • .map 给数组对象添加新属性
    letmenuList=[{name:'晓明',age:18},{name:'黎明',age:20},{name:'德华',age:28},]constlist=this.list.map((item)=>({...item,title:`新属性1`......
  • cannot be cast to java.util.Map
    特别记一下,对象的字段,首字母小写!!!代码:@OverridepublicList<MODEL_Vo>find(Stringstr){Stringsql="select*fromtab";Queryquery=em.......
  • BigData——MapReduce
    MapReduce上图是MapReduce的任务处理过程概述MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.MapReduce是分布式运行的,由两个阶......
  • map.merge() 方法
     packageutils;importlombok.AllArgsConstructor;importlombok.Data;importlombok.extern.slf4j.Slf4j;importjava.text.ParseException;importjava.text.......
  • Java并发编程解析 | 基于JDK源码解析Java领域中并发锁之同步器Semaphore,CyclicBarrier
    苍穹之边,浩瀚之挚,眰恦之美;悟心悟性,善始善终,惟善惟道!——朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享......
  • Java map和flatmap
    importjava.lang.reflect.Array;importjava.util.ArrayList;importjava.util.List;importjava.util.Locale;publicclass_1{publicstaticvoidmain(Str......
  • js 树形结构 数组 互转
    letarr=[{"categoryCode":"90000","categoryCnName":"A1级别","id":"111","bdictDesc":"测试1","pid":"0","validStatus"......
  • BM50 两数之和(利用hashmap特性以提高效率实现目标)
    描述给出一个整型数组numbers和一个目标值target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。(注:返回的数组下标从1开始算起,保证target一定......
  • QPixmap::fromImage(img)访问冲突
     我是在将图像格式转换为QImage后,把QImage发送给UI界面显示时出现的问题。 加了个深拷贝,就解决了。OutImage=QImage(buffer,width,height,QImage::Format_RGB88......