2017-05-05 8 views
1

Ich benutze die Apache Commons BeanUtils zum Kopieren einiger Eigenschaften von einer Quell-Bean zu einer Ziel-Bean. In diesem Fall möchte ich keine Nullwerte in meiner Ziel-Bean setzen, die von der Quell-Bean kommen.Nullwerte in BeanUtils.copyProperties ignorieren

Wie zum Beispiel:

Person sourcePerson = new Person(); 
sourcePerson.setHomePhone("123"); 
sourcePerson.setOfficePhone(null); 

Person destPerson = new Person(); 
destPerson.setOfficePhone("456"); 

BeanUtils.copyProperties(destPerson, sourcePerson); 
System.out.println(destPerson.getOffcePhone()); 

// Hier destPerson Office gesetzt wird

auf null Wie kann ich das vermeiden? Ich versuchte sogar die folgende Aussage zu setzen: BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);

was scheint nicht zu helfen.

Wie können wir Nullen in Apache Commons BeanUtils ausschließen?

+0

http://stackoverflow.com/questions/17417345/beanutils-copyproperties-api-to-ignore-null-and-specific-propertie – StanislavL

+0

Sie können PropertyUtils verwenden, die nicht versuchen, die Eigenschaft zu konvertieren ... Sonst Sie müssen das ConvertUtils.register für einen Standardwert registrieren ... – VelNaga

+0

Ich möchte keinen Standardwert, ich möchte einfach keine vorhandenen Werte mit null überschreiben. Ich habe immer noch nicht verstanden, wie PropertyUtils Nullen ausschließt. –

Antwort

0

Apache Commons-BeanUtils unterstützen diese Situation nicht. So sollten Sie tun dies, indem Sie sich selbst:

public class BeanUtils { 

    public static void copyPropertiesIgnoreNull(Object source, Object dest) { 
     final BeanWrapper src = new BeanWrapperImpl(source); 
     java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); 
     for(java.beans.PropertyDescriptor pd : pds) { 
      if(!src.isReadableProperty(pd.getName()) || pd.getWriteMethod() == null){ 
       continue; 
      } 
      Object srcValue = src.getPropertyValue(pd.getName()); 
      if (srcValue == null) { 
       continue; 
      } 
      BeanUtils.copyProperties(dest, pd.getName(), srcValue); 
     } 
    } 
} 
+0

Mit welchem ​​Paket/welcher Version arbeiten Sie? 'BeanUtils.copyProperties (dest, pd.getName(), srcValue);' – JustOneMoreQuestion

1

BeanUtils funktioniert nicht, wenn Eigenschaften verschachtelt sind wie contact.businessName.firstname wo vorName ist die Zeichenfolge und andere benutzerdefinierte Klasse.

Verwandte Themen