У меня есть два 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