web-dev-qa-db-ja.com

nullおよび特定のプロパティを無視するBeanUtilscopyProperties API

SpringのBeanUtils.copyProperties()は、Beanのコピー中に特定のプロパティを無視するオプションを提供します。

_public static void copyProperties(Object source,
                 Object target,
                 String[] ignoreProperties) throws BeansException
_

Apache Commons BeanUtilsは同様の機能を提供しますか?

また、SpringのBeanUtils.copyProperties()を使用しているときにnull値を無視することは可能ですか、CommonsBeanUtilsでこの機能が表示されます。

_Date defaultValue = null;
DateConverter converter = new DateConverter(defaultValue);
ConvertUtils.register(converter, Date.class);
_

SpringのBeanUtilsで同じことを達成できますか?

11
Arun

null- valueを無視する場合は、プロパティをコピーする前に、次のコード行で行う必要があります。

BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);
7
edu

_org.springframework.beans.BeanUtils_を使用している場合は、メソッドcopyProperties(Object source, Object target, String... ignoreProperties)を使用して特定のプロパティを無視できます。例、

_BeanUtils.copyProperties(sourceObj, targetObj, "aProperty", "another");
_
5

これは、ターゲットにコピーするときにnullフィールドをスキップするために使用しているサンプルコードスニペットです。プロパティ名、値などを使用して、特定のプロパティのチェックを追加できます。私はorg.springframework.beans.BeanUtilsを使用しました。

public static void copyNonNullProperties(Object src, Object target) {
    BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
}

public static String[] getNullPropertyNames(Object source) {
    final BeanWrapper src = new BeanWrapperImpl(source);
    PropertyDescriptor[] pds = src.getPropertyDescriptors();

    Set<String> emptyNames = new HashSet<String>();
    for (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);
}
0
Prajith Vb