通过自定义注解获取定义的属性值的时候最后获取到的对象的值为null,不能正确设置对象的值
public class FieldMapperUtil {
public static void mapFields(Object source, Object destination) throws IllegalAccessException {
Class<?> sourceClass = source.getClass();
Class<?> destinationClass = destination.getClass();
Field[] sourceFields = sourceClass.getDeclaredFields();
Field[] destinationFields = destinationClass.getDeclaredFields();
for (Field sourceField : sourceFields) {
sourceField.setAccessible(true);
for (Field destinationField : destinationFields) {
destinationField.setAccessible(true);
if (isInstanceField(destinationField) && destinationField.isAnnotationPresent(FieldMapping.class)) {
FieldMapping destFieldMapping = destinationField.getAnnotation(FieldMapping.class);
String destFieldName = destFieldMapping.value();
System.out.println(destFieldName);
mapField(sourceField, destinationField, source, destination);
}
}
}
}
private static boolean isInstanceField(Field field) {
return !Modifier.isStatic(field.getModifiers());
}
private static void mapField(Field sourceField, Field destinationField, Object source, Object destination) {
try {
sourceField.setAccessible(true);
destinationField.setAccessible(true);
Object value = sourceField.get(source);
if (value != null) {
destinationField.set(destination, value);
}
// destinationField.set(destination, value);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to map fields: " + e.getMessage(), e);
}
}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldMapping {
String value();
}
```java
public static void main(String[] args) throws IllegalAccessException {
// 创建一个 List<Map<String, Object>> 对象,其中包含多个 Map 对象
List<Map<String, Object>> data = new ArrayList<>();
// 创建一个 Map 对象,其中包含 BRANCH_NAME、USER_NAME、USER_CODE、ACCOUNT、BRANCH、AVAILABLE、ETF_CODE 等字段
Map<String, Object> map1 = new HashMap<>();
map1.put("BRANCH_NAME", "上海分行");
map1.put("USER_NAME", "张三");
map1.put("USER_CODE", "123456");
map1.put("ACCOUNT", "1234567890");
map1.put("AVAILABLE", "10000.0");
map1.put("ETF_CODE", "000300");
// 创建另一个 Map 对象
Map<String, Object> map2 = new HashMap<>();
map2.put("BRANCH_NAME", "北京分行");
map2.put("USER_NAME", "李四");
map2.put("USER_CODE", "654321");
map2.put("ACCOUNT", "9876543210");
map2.put("AVAILABLE", "20000.0");
map2.put("ETF_CODE", "000016");
// 将两个 Map 对象添加到 List 中
data.add(map1);
data.add(map2);
List<CustomerInfo> userDataList = new ArrayList<>();
for (Map<String, Object> map : data) {
CustomerInfo userData = new CustomerInfo();
FieldMapperUtil.mapFields(map, userData);
userDataList.add(userData);
}
// 打印映射后的结果
for (CustomerInfo userData : userDataList) {
System.out.println(userData);
}
}
```java
@Data
public class CustomerInfo {
@FieldMapping("BRANCH_NAME")
public String branchId;
@FieldMapping("USER_NAME")
public String custName;
@FieldMapping("USER_CODE")
public String custCode;
@FieldMapping("ACCOUNT")
public String fundAccount;
@FieldMapping("ETF_CODE")
public String securityCode;
@FieldMapping("AVAILABLE")
public String overdraftAmount;
}

