代码
public static void setvalue(Object src, Object dest) throws IntrospectionException, InvocationTargetException, IllegalAccessException, InstantiationException {
final BeanWrapper beanWrapper = new BeanWrapperImpl(src);
java.beans.PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors();
for (java.beans.PropertyDescriptor pd : pds) {
Class<?> clazz = pd.getPropertyType();
if (clazz.equals(java.lang.String.class) || clazz.equals(java.util.Date.class)
|| clazz.getName().equals("int")
|| clazz.getName().equals("long")
|| clazz.getName().equals("float")
|| clazz.getName().equals("double")
|| clazz.getName().equals("char")
|| clazz.getName().equals("byte")
|| clazz.getName().equals("boolean")
|| clazz.getName().equals("short")
|| clazz.equals(java.lang.Integer.class)
|| clazz.equals(java.lang.Float.class)
|| clazz.equals(java.lang.Double.class)
|| clazz.equals(java.lang.Long.class)
|| clazz.equals(java.lang.Byte.class)
|| clazz.equals(java.lang.Short.class)
|| clazz.equals(java.lang.Character.class)
|| clazz.equals(java.util.List.class)
|| clazz.equals(java.util.Set.class)
) {
Object value = beanWrapper.getPropertyValue(pd.getName());
if (Objects.isNull(value)) {
continue;
}
if (Objects.isNull(dest)) {
dest = src.getClass().newInstance();
}
PropertyDescriptor property = new PropertyDescriptor(pd.getName(), dest.getClass());
Method setMethod = property.getWriteMethod();
setMethod.invoke(dest, value);
} else if (clazz.getName().equals("java.lang.Class")) {
continue;
} else {
PropertyDescriptor property = new PropertyDescriptor(pd.getName(), src.getClass());
Method readMethod = property.getReadMethod();
Object srcNested = readMethod.invoke(src);
if (Objects.isNull(srcNested)) {
continue;
}
PropertyDescriptor destProperty = new PropertyDescriptor(pd.getName(), dest.getClass());
Method destReadMethod = destProperty.getReadMethod();
Object destNested = destReadMethod.invoke(dest);
setvalue(srcNested, destNested);
}
}
}
注意
如果使用了 Lombok的@Builder
必须加上 注解
@AllArgsConstructor @NoArgsConstructor