Я полагаю, у вас уже есть решение, так как с момента вашего запроса прошло много времени. Однако это не помечено как решенное, и, возможно, я могу помочь другим пользователям.
Вы пытались определить подкласс BeanUtilsBean
пакета org.commons.beanutils
? На самом деле, BeanUtils
использует этот класс, так что это улучшение решения, предложенного dfa.
Проверяя исходный код этого класса, я думаю, что вы можете перезаписать метод copyProperty
, проверяя нулевые значения и ничего не делая, если значение равно нулю.
Примерно так:
package foo.bar.copy;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtilsBean;
public class NullAwareBeanUtilsBean extends BeanUtilsBean{
@Override
public void copyProperty(Object dest, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
if(value==null)return;
super.copyProperty(dest, name, value);
}
}
Тогда вы можете просто создать экземпляр NullAwareBeanUtilsBean
и использовать его для копирования ваших бинов, например:
BeanUtilsBean notNull=new NullAwareBeanUtilsBean();
notNull.copyProperties(dest, orig);