多年工作经验工具类开源分享--json、bean、map互转

229 阅读2分钟

前言

  • Java开发中经常遇到实体互转的情况,我们大多使用apache提供的beanutils工具即可完成数据的转换。
  • 对于我们自身而言,经常为了躲避实体的字段映射,我们经常会将实体转换为map ; 或者将map转换实体的操作,今天我们聊聊实体、map、json三者的转换关系

实体转map

  • bean转map其实很简单,我们只需要反射获取实体的字段。然后通过反射获取对应的值,分别放入到map中就可以了。
public static Map<String, Object> bean2Map(Object obj){
   Map<String, Object> resultMap = new HashMap<String, Object>();
   try {
      Field[] declaredFields = obj.getClass().getDeclaredFields();
      for (Field field : declaredFields) {
         field.setAccessible(true);
         resultMap.put(field.getName(), field.get(obj));
      }
   } catch (Exception e) {
      logger.error(e);
   }
   return resultMap;
}

map转实体

  • map转实体和实体转map有一定的区别。实体转map的时候是实体有的都可以转换到map中。可以说是全局转换
  • 但是map转实体就不是全局转换了,不是看你有什么而是看我要什么。就是这么强硬。map比如有100对键值对。但是实体中只有两个属性。那么不好意思最终转换出来的只有两个属性能够被有效的使用
  • map转实体也是借助bean的反射,去map中查找。在通过反射赋值给bean属性。整个过程和bean转map相反
  • 但是map转实体就涉及到泛型的操作。所以在方法签名上添加泛型
public static <T> T map2Bean(Map<?, ?> map, Class<T> cls) {
   T obj = null;
   try {
      obj = cls.newInstance();
      /** 获取T类的当前属性 */
      Field[] declaredFields = cls.getDeclaredFields();
      for (Field field : declaredFields) {
         /** 获取属性名称 */
         String fieldName = field.getName();
         /** 检测该属性在map集合中是否存在。 */
         if(map.containsKey(fieldName)){
            field.setAccessible(true);
            if (map.get(fieldName) != null) {
               field.set(obj, DataType.valueOf(field.getType().getSimpleName(), map.get(fieldName)));
            }
         }
      }
   } catch (Exception e) {
      logger.error(e);
   }
   return obj;
}

json转实体

  • json转实体就很简单了,在JSONobject类中提供了丰富的类型转换,上面提到的map和bean的互转其实都是可以借助JsonObject进行转换。
public static <T> T json2Bean(String jsonText , Class<T> cls){
   T bean = null;
   JSONObject jsonObject = JSONObject.parseObject(jsonText);
   try {
      bean = jsonObject.toJavaObject(cls);
   } catch (Exception e) {
      logger.error(e);
   }
   return bean;
}

json转map

  • json和map互转原理也都是相同
public static Map<Object, Object> json2Map(String jsonText){
   System.out.println("1.1.1");
   Map<Object, Object> map = new HashMap<Object, Object>();
   JSONObject jsonObject = JSONObject.parseObject(jsonText);
   for (Object key : jsonObject.keySet()) {
      map.put(key, jsonObject.get(key));
   }
   return map;
}

总结

  • 类型转换使我们常见的东西,类似于这些东西我们封装自己工具类,方便快速开发