From 3f7f0f709857fcc86cce42be3f604388e165298b Mon Sep 17 00:00:00 2001 From: liuyiliang Date: Mon, 15 Jul 2024 17:12:48 +0800 Subject: [PATCH] =?UTF-8?q?map=E8=BD=ACentity=E6=96=B9=E6=B3=95=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../energy/modules/system/util/DataUtils.java | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/energy/modules/system/util/DataUtils.java b/src/main/java/org/energy/modules/system/util/DataUtils.java index b781ea4..2d1babd 100644 --- a/src/main/java/org/energy/modules/system/util/DataUtils.java +++ b/src/main/java/org/energy/modules/system/util/DataUtils.java @@ -1,5 +1,6 @@ package org.energy.modules.system.util; +import java.lang.reflect.Field; import java.util.Map; import java.util.function.Supplier; @@ -7,16 +8,64 @@ public class DataUtils { public static T mapToEntity(Map map, Supplier supplier) { T entity = supplier.get(); + Class clazz = entity.getClass(); map.forEach((key, value) -> { try { - entity.getClass().getDeclaredField(key).setAccessible(true); - entity.getClass().getDeclaredField(key).set(entity, value); - } catch (NoSuchFieldException | IllegalAccessException e) { + Field field = findField(clazz, key); + if (field != null) { + field.setAccessible(true); + Object castedValue = castValue(field.getType(), value); + field.set(entity, castedValue); + } else { + System.err.println("Field not found: " + key); + } + } catch (IllegalAccessException e) { + System.err.println("IllegalAccessException for field: " + key); + e.printStackTrace(); + } catch (Exception e) { + System.err.println("Unexpected exception for field: " + key); e.printStackTrace(); } }); return entity; } + + private static Field findField(Class clazz, String fieldName) { + while (clazz != null) { + try { + return clazz.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + return null; // Field not found + } + + private static Object castValue(Class fieldType, Object value) { + if (value == null) { + return null; + } + if (fieldType.isAssignableFrom(value.getClass())) { + return value; + } + if (fieldType == int.class || fieldType == Integer.class) { + return Integer.parseInt(value.toString()); + } + if (fieldType == long.class || fieldType == Long.class) { + return Long.parseLong(value.toString()); + } + if (fieldType == float.class || fieldType == Float.class) { + return Float.parseFloat(value.toString()); + } + if (fieldType == double.class || fieldType == Double.class) { + return Double.parseDouble(value.toString()); + } + if (fieldType == boolean.class || fieldType == Boolean.class) { + return Boolean.parseBoolean(value.toString()); + } + // Add more type conversions as needed + return value; + } }