BeanCopier 进行copy时如何对源对象为null的属性不进行拷贝?
解决方案 »
- 说说实现信息推送的好技术?
- 基于java技术构建, 小第做了个 msn 中英文翻译 机器人!!!
- 求救 关于ASP和Java数据传递问题
- JAVAMAIL
- tomcat 无法执行jsp文件,大家帮忙看一下
- 在JB里怎么把class文件打包成.jar
- 如何控制ie下载打开pdf文档后,直接进行打印?
- “函数序列错误”什么意思?
- jb编译时遇到如下问题,怎么解决呢?急!!!!
- JAVA svg文件转PNG图片 IE8出错.
- 使用SpringCloud遇到的Connection Refused问题
- echarts在firefox中报错:Error: `setOption` should not be called during main process.
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); Set<String> emptyNames = new HashSet<String>();
for(java.beans.PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) emptyNames.add(pd.getName());
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
} public static void copyPropertiesIgnoreNull(Object src, Object target){
BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
}
private static String generateKey(Class<?> class1, Class<?> class2) {
return class1.toString() + class2.toString();
}
private static BeanCopier getBeanCopier(Class<?> sourceClass, Class<?> targetClass) {
String beanKey = generateKey(sourceClass, targetClass);
BeanCopier copier = null;
if (!beanCopierCache.containsKey(beanKey)) {
copier = BeanCopier.create(sourceClass, targetClass, true);
beanCopierCache.put(beanKey, copier);
} else {
copier = beanCopierCache.get(beanKey);
}
return copier;
}
public interface Convert<T,E>{
public Return<T> convert(T t,E e);
}
public static <T,E> T convert(Class<T> cls,E e) {
return convert(cls,e,null).getRetObject();
}
public static <T,E> Return<T> convert(Class<T> cls,E e,Convert<T,E> convert) {
if(e == null) {
return null;
}
T t = (T) ConstructorAccess.get(cls).newInstance();
BeanCopier copier = getBeanCopier(e.getClass(), t.getClass());
copier.copy(e, t,null);
if(convert != null) {
return convert.convert(t,e);
}
return new Return<>(t);
}
public static void copy(Object target,Object source) {
copy(target,source,false);
}
public static void copy(Object target,Object source,boolean cover) {
BeanCopier copier = getBeanCopier(source.getClass(), target.getClass());
copier.copy(source,target, (value, t, context)->{
if(!cover && value == null) {
return BeanMap.create(target).get(getPropertyName(String.valueOf(context)));
}
return value;
});
}
private static String getPropertyName(String methodName) {//setAge ---> age
char[] newChar = new char[methodName.length() - 3];
System.arraycopy(methodName.toCharArray(), 3, newChar, 0, methodName.length() - 3);
newChar[0] = Character.toLowerCase(newChar[0]);
return String.valueOf(newChar);
}