object转list,map工具

@Slf4j
public class TypeConversionUtils {

    /**
     * object转List
     *
     * @param obj   对象
     * @param clazz class
     * @param <T>   目标对象
     * @return list<T>
     */
    public static <T> List<T> objectToList(Object obj, Class<T> clazz) {
        List<T> resultList = new ArrayList<>(MtmConstantInfo.NUMBER_TEN);
        if (null == obj) {
            return Collections.EMPTY_LIST;
        }
        List<T> models = JSONObject.parseArray(JSON.toJSONString(obj), clazz);
        for (T model : models) {
            T newModel = JSONObject.parseObject(JSON.toJSONString(model), clazz);
            resultList.add(newModel);
        }
        return resultList;
    }

    /**
     * object转Map
     *
     * @param obj 对象(包括继承对象)
     * @return map
     */
    public static Map<String, Object> objectAllToMap(Object obj) {
        Map<String, Object> dataMap = new HashMap<>(MtmConstantInfo.NUMBER_SIXTEEN);
        if (null == obj) {
            return dataMap;
        }
        Class<?> clazz = obj.getClass();
        copyField(obj, dataMap, clazz);
        copyField(obj, dataMap, clazz.getSuperclass());
        return dataMap;
    }

    /**
     * 复制对象每个字段值
     *
     * @param obj     对象
     * @param dataMap 返回map
     * @param clazz   对象类型
     */
    private static void copyField(Object obj, Map<String, Object> dataMap, Class<?> clazz) {
        for (Field field : clazz.getDeclaredFields()) {
            try {
                BeanUtils.setProperty(dataMap, field.getName(), BeanUtils.getProperty(obj, field.getName()));
            } catch (IllegalAccessException e) {
                log.error("TypeConversionUtils objectAllToMap IllegalAccessException!");
            } catch (InvocationTargetException e) {
                log.error("TypeConversionUtils objectAllToMap InvocationTargetException!");
            } catch (NoSuchMethodException e) {
                log.error("TypeConversionUtils objectAllToMap NoSuchMethodException!");
            }
        }
    }

    /**
     * object转Map(java 内省机制 的 方式)
     *
     * @param obj 对象(包括继承对象)
     * @return map
     */
    public static Map<String, Object> objectToMap(Object obj) {
        Map<String, Object> map = new HashMap<>(MtmConstantInfo.NUMBER_SIXTEEN);
        try {
            // 获取JavaBean的描述器
            BeanInfo b = Introspector.getBeanInfo(obj.getClass(), Object.class);
            // 获取属性描述器
            PropertyDescriptor[] pds = b.getPropertyDescriptors();
            // 对属性迭代
            for (PropertyDescriptor pd : pds) {
                // 属性名称
                String propertyName = pd.getName();
                // 属性值,用getter方法获取
                Method m = pd.getReadMethod();
                // 用对象执行getter方法获得属性值
                Object properValue = m.invoke(obj);
                // 确认对象的类型
                Class<?> propertyType = pd.getPropertyType();
                if (Objects.equals(Date.class, propertyType) && Objects.nonNull(properValue)) {
                    ApiModelProperty annotation = propertyType.getAnnotation(ApiModelProperty.class);
                    SimpleDateFormat df = null;
                    if (null != annotation && StringUtils.isNotBlank(annotation.example())) {
                        df = new SimpleDateFormat(annotation.example());
                    } else {
                        df = new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN);
                    }
                    String format = df.format(properValue);
                    // 把属性名-属性值 存到Map中
                    BeanUtils.setProperty(map, propertyName, format);
                } else {
                    // 把属性名-属性值 存到Map中
                    BeanUtils.setProperty(map, propertyName, properValue);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值