jialh
昨天 dd6687b118561100e1677e88a9c2f5842a54c531
java110-utils/src/main/java/com/java110/utils/util/BeanConvertUtil.java
@@ -69,17 +69,13 @@
     * @return 目标对象
     */
    public static <T1, T2> T2 covertBean(T1 orgBean, T2 dstBean) {
        if(orgBean == null){
        if (orgBean == null) {
            return dstBean;
        }
        try {
            //BeanUtils.copyProperties(dstBean, orgBean);
            if (orgBean instanceof Map) {
                BeanMap beanMap = BeanMap.create(dstBean);
                //beanMap.putAll((Map)orgBean);
                objectFieldsPutMap(dstBean, beanMap, (Map) orgBean);
                objectFieldsPutMap(dstBean, beanMap, (Map<String, Object>) orgBean);
                return dstBean;
            }
            final BeanCopier beanCopier = BeanCopier.create(orgBean.getClass(), dstBean.getClass(), true);
@@ -92,23 +88,44 @@
    }
    private static void objectFieldsPutMap(Object dstBean, BeanMap beanMap, Map<String, Object> orgMap) {
        //Field[] fields = dstBean.getClass().getDeclaredFields();
        Field[] fields = FieldUtils.getAllFields(dstBean.getClass());
        for (Field field : fields) {
            if (!orgMap.containsKey(field.getName())) {
            String fieldName = field.getName();
            if (!orgMap.containsKey(fieldName)) {
                continue;
            }
            Class<?> dstClass = field.getType();
            //System.out.println("字段类型" + dstClass);
            Object value = orgMap.get(field.getName());
            if(value == null){
            Class<?> targetType = field.getType();
            Object value = orgMap.get(fieldName);
            if (value == null) {
                continue;
            }
            //String 转date
            Object tmpValue = Java110Converter.getValue(value, dstClass);
            //System.out.println("tmpValue"+value.toString());
            beanMap.put(field.getName(), tmpValue);
            try {
                // ✅ 核心修复:只要是 Map,且目标不是基础类型,就递归转 DTO
                if (value instanceof Map) {
                    // 排除基础类型、包装类、String、Date
                    boolean isBasicType = targetType.isPrimitive()
                            || Number.class.isAssignableFrom(targetType)
                            || String.class == targetType
                            || Boolean.class == targetType
                            || Date.class == targetType;
                    if (!isBasicType) {
                        // 递归创建并转换嵌套对象
                        Object nestedObj = targetType.newInstance();
                        objectFieldsPutMap(nestedObj, BeanMap.create(nestedObj), (Map<String, Object>) value);
                        value = nestedObj;
                    }
                }
                // 原有类型转换(String->Date等)
                Object convertedValue = Java110Converter.getValue(value, targetType);
                beanMap.put(fieldName, convertedValue);
            } catch (Exception ignored) {
                // 转换失败不抛错,保持原有逻辑兼容
            }
        }
    }