一、编写工具类CopyPropertiesUtil.java
//BeanUtils实现部份复制工具类,筛选出值为空的字段,返回空字段数组
public class CopyPropertiesUtil{
public static String[] getNullPropertyNames(Object object) {
final BeanWrapper src = new BeanWrapperImpl(object);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for(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);
}
}
二、使用BeanUtils以及上面的工具类实现局部更新(注意BeanUtils来自spring的org.springframework.beans.BeanUtils)
/**
* 更新酒店信息
* @param hid
* @param img
* @return
*/
@PutMapping("/{hid}")
public ResponseEntity updateHotelImg(@PathVariable("hid") Long hid,@RequestBody Hotel hotel) {
Hotel target = hotelService.findById(hid);
BeanUtils.copyProperties(hotel,target,CopyPropertiesUtil.getNullPropertyNames(hotel));
hotelService.save(target);
return ResponseEntity.ofSuccess().status(HttpStatus.OK);
}