2015-03-17 3 views
0

Я пытаюсь скопировать объект bean через Beanutils.copyproperties(Employee,EmployeeDTO). Это не бросает мне никаких исключений при копировании, но когда я пытаюсь восстановить EmployeeDTO.getPhoneNumber(), он показывает мне ClassCastException, потому что объект DTO показывает список номеров телефонов объекта employee.Свойства копирования бобов, содержащих список с Beanutils

public class Employee implements Serializable { 

    private String name; 

    private String salary; 

    private List<PhoneNumber> phoneNumber = new ArrayList<PhoneNumber>(); 

    .... 
} 

public class EmployeeDTO implements Serializable { 

    private String name; 

    private String salary; 

    private List<PhoneNumber> phoneNumber = new ArrayList<PhoneNumber>(); 
    .... 
} 

ответ

0

Список не может быть скопирован через Bean Utils. Вам нужно сначала перебрать список номеров телефонов из DTO, чтобы сформировать, затем сделать окончательный ход

0

Вы могли бы сделать это с использованием обычного старого отражения. Это переместится на один уровень вверх, чтобы разместить списки. Адаптируйте к вашим потребностям.

Method[] srcMethods = installation.getClass().getMethods(); 
    for (Method srcMethod : srcMethods) { 
     if (srcMethod.getName().startsWith("get")) { 
      try { 
       String setMethodName = srcMethod.getName().replaceFirst("get", "set"); 
       Class<?> returnType = srcMethod.getReturnType(); 
       if(returnType.equals(java.util.List.class)) 
        returnType = java.util.Collection.class; 
       Method thisMethod = this.getClass().getMethod(setMethodName, returnType); 
       log.info("attempting get and set on " + srcMethod.getName() + " " + thisMethod.getName()); 
       thisMethod.invoke(this, srcMethod.invoke(installation)); 
      } catch (Exception e) { 
       log.error("SDK model out of sync with CM model", e); 
      } 
     } 
    } 
Смежные вопросы