我有兩個相同型別的物件objclient,(即狗,貓..)objserverObject
當我在我的端點中收到時objclient,我需要用非空的屬性替換它的屬性objserver而不做明確的,例如:
private void eraser(Object clientObject, Object serverObject){
//set only non null attributes of serverObject to clientObject
}
uj5u.com熱心網友回復:
如果您想在不同的 java 物件之間映射值,而不必顯式地映射每個欄位,您可以使用例如ModelMapper 。
uj5u.com熱心網友回復:
BeanUtils.copyProperties在 spring-boot 專案中非常常見,我們可以使用它來傳遞ignoreProperties (null case) & 我們可以通過使用如下自定義方法找到 null case:
private ClientObject eraser(ClientObject clientObject, ServerObject serverObject){
BeanUtils.copyProperties(serverObject, clientObject, getNullPropertyNames(serverObject));
return clientObject;
}
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);
}
它只會將 serverObject 的非空屬性設定為clientObject。
uj5u.com熱心網友回復:
實際上,與@Rakib 相比,最好的解決方案是:
private void erase(Object clientObject, Object defaultObject) throws IllegalAccessException, NoSuchFieldException {
Field[] Fields = defaultObject.getClass().getDeclaredFields();
for (Field field : Fields) {
field.setAccessible(true);
Object value = field.get(defaultObject);
if(value !=null)
field.set(clientObject,value);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/470176.html
