Merge remote-tracking branch 'origin/main'

main
Dayu 1 year ago
commit f3bfc4910f
  1. 55
      src/main/java/org/energy/modules/system/util/DataUtils.java

@ -1,5 +1,6 @@
package org.energy.modules.system.util; package org.energy.modules.system.util;
import java.lang.reflect.Field;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -7,16 +8,64 @@ public class DataUtils {
public static <T> T mapToEntity(Map<String, Object> map, Supplier<T> supplier) { public static <T> T mapToEntity(Map<String, Object> map, Supplier<T> supplier) {
T entity = supplier.get(); T entity = supplier.get();
Class<?> clazz = entity.getClass();
map.forEach((key, value) -> { map.forEach((key, value) -> {
try { try {
entity.getClass().getDeclaredField(key).setAccessible(true); Field field = findField(clazz, key);
entity.getClass().getDeclaredField(key).set(entity, value); if (field != null) {
} catch (NoSuchFieldException | IllegalAccessException e) { 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(); e.printStackTrace();
} }
}); });
return entity; 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;
}
} }

Loading…
Cancel
Save