Es ist ziemlich schwer zu sagen, passieren, ohne Code aus der Product
Klasse zu sehen, noch die ProductService.updateProduct
Methode. Sie können jedoch möglicherweise die Klasse BeanUtilsBean
in der Apache Commons-Bibliothek verwenden.
public static void nullAwareBeanCopy(Object dest, Object source) throws IllegalAccessException, InvocationTargetException {
new BeanUtilsBean() {
@Override
public void copyProperty(Object dest, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
if(value != null) {
super.copyProperty(dest, name, value);
}
}
}.copyProperties(dest, source);
}
Dies ist ein Ich schrieb aber da Ihr mit Feder möchten Sie können die Feder Bohne utils Klasse bei org.springframework.beans.BeanUtils
gelegen verwenden.
public void updateProduct(Product updatedProduct) {
Product existingProduct = /*find existing product*/;
nullAwareBeanCopy(existingProduct, updatedProduct);
// or
myCopyProperties(updatedProduct, existingProduct);
}
Watchout dieser 2 verschiedenen Methoden Quell-/Zielparameter entgegengesetzt sind von einander: eine schnelle Suche zu tun für den Code, den ich über this answer from alfredx kam, die diesen Code
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for(java.beans.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);
}
// then use Spring BeanUtils to copy and ignore null
public static void myCopyProperties(Object, src, Object target) {
BeanUtils.copyProperties(src, target, getNullPropertyNames(src))
}
Sie dann verwenden Sie es mögen kann, hat .
Achten Sie auf Updates, bei denen der tatsächliche neue Wert Null sein muss;) Wenn Sie nie "clear" -Werte senden, können Sie Ihren Ansatz verwenden, andernfalls müssen Sie nachverfolgen, welche Felder durch die Anfrage festgelegt wurden. –