Beanutils заставляет copyproperties работать с вложенным свойством другого типа - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть два bean-компонента с зеркальными свойствами, включая вложенные свойства другого типа, т.е.

BeanDTO {
    NestedBeanDTO nestedProperty;
}

Bean {
    NestedBean nestedProperty;
}

NestedBeanDTO {
    String name;
}

NestedBean {
    String name;
}

Теперь я хочу, чтобы Apache commons

BeanUtils.copyProperties(Bean, BeanDTO) 

копировал все свойства bean, включаявложенные, потому что внутри тоже имеют те же свойства, однако я получил эту ошибку:

argument type mismatch - had objects of type "NestedBeanDTO" but expected signature "NestedBean"

Насколько я помню, можно настроить поведение конвертера с BeanutilsBean класс через ConverterUtils зарегистрироваться, но я не могу понять, как.

Есть предложения?

РЕДАКТИРОВАТЬ

Решено с помощью ConverterUtils.register () :

private static class CustomBeanConverter implements Converter {

    @Override
    public <T> T convert(Class<T> aClass, Object o) {
        Object output = null;
        try {
            output = aClass.getDeclaredConstructor().newInstance();
            BeanUtils.copyProperties(output, o);
        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException e) {
            e.printStackTrace();
        }
        return (T)output;
    }
}

, а затем:

BeanUtilsBean.getInstance().getConvertUtils().register(new CustomBeanConverter(), NestedBean.class);

BeanUtils.copyProperties(Bean, BeanDTO)

автоматически разрешит свойства NestedBeanDTO.name с помощью NestedBean.name

...